来聊一聊std::function和lambda性能效率问题

前言

C++11 引入了 std::function 和 lambda 表达式,使得编写C++非常简洁和灵活。然而,使用这些特性时,性能问题常常是开发者关注的重点。接下来,我们一起来探讨下std::function和labmda表达式的效率问题。

std::function

std::function 通常用于定义一个函数接口,而具体的实现可以是任何符合签名的可调用对象。

包装普通函数

#include <functional>
#include <iostream>

void myFunction(int a) {
    std::cout << "Function called with " << a << std::endl;
}

int
main(int argc, char** argv) {
    std::function<void(int)> func = myFunction;
    func(10);
    return 0;
}

包装labmda表达式

main(int argc, char** argv) {
    std::function<void(int)> func = [](int a) {
       std::cout << "Lambda called with " << a << std::endl;
    };
    func(10);
    return 0;
}

包装函数对象

#include <functional>
#include <iostream>

st