Gau*_*gal 15 c++ function-pointers functor
使用函子和函数指针有什么区别.例如
//Functor
struct add_x
{
int x;
add_x(int y):x(y){}
int operator()(int y)
{
return x+y;
}
};
//Function
int (func)(int x)
{
return ++x;
}
std::vector<int> vec();
//fill vec with 1 2 3 4 5
int (*f)(int) = func;//Function pointer
std::transform(vec.begin(),vec.end(),f); //approach 1
std::transform(vec.begin(),vec.end(),add_x(1)); //approach 2
Run Code Online (Sandbox Code Playgroud)
这两种方法都有效,但我确信会有一种方法比其他方法更受欢迎(或可能).
Dev*_*lar 14
首先,仿函数可以包含内部状态; 仅对此函数对象的调用有效的状态.您可以static向函数添加变量,但这些变量将用于函数的任何调用.
其次,编译器可以内联对仿函数的调用; 它对函数指针不能做同样的事情.这就是为什么C++ std::sort()在qsort()性能方面胜过C 的原因.
| 归档时间: |
|
| 查看次数: |
7489 次 |
| 最近记录: |