C++ 函数与函数指针
有什么不同吗C++ 函数与函数指针,c++,function-pointers,std-function,C++,Function Pointers,Std Function,有什么不同吗 “保存/传输”功能的最佳方式是什么 function<void(int)> fcn = [](int par) {std::cout<<"fcn: "<<par<<std::endl; }; void(*fcn_a)(int) = [](int par) {std::cout<<"fcn_a: "<<par<<std
function<void(int)> fcn =
[](int par) {std::cout<<"fcn: "<<par<<std::endl; };
void(*fcn_a)(int) =
[](int par) {std::cout<<"fcn_a: "<<par<<std::endl; };
fcn(12);
fcn_a(12);
函数fcn=
[](int par){std::coutstd::function
更通用-您可以在其中存储任何具有正确签名的可调用对象(函数指针、方法指针、带有运算符()的对象
),并且您可以使用构造std::function
)
函数指针只能接受具有正确签名的函数,但可能稍快一些,并且可能生成稍小一些的代码。在未捕获lambda的情况下,使用函数指针将比使用std::Function
快。这是因为std::Function
是一种更通用的beast,并且使用类型e-erasure来存储传递给它的函数对象。它通过类型擦除来实现这一点,这意味着您最终将调用操作符()
成为虚拟的
OTOH,非捕获lambda可隐式转换为相应的函数指针。但是,如果需要完整的闭包,则必须尽可能将lambda分配给std::function
,或者依赖于通过模板进行的类型推断