可调用的概念在http://en.cppreference.com/w/cpp/concept/Callable中定义.
假设我有一个可调用对象f,它有一个类型为T*的参数并返回类型为void.f可以是任何可调用类型(函数对象,指向成员函数的指针,指向数据成员的指针等).我怎么能调用f?
简单地调用f(x)失败,因为f可以是指向成员函数或数据成员的指针.有一个简单的方法来调用f吗?一种可能的解决方案是std :: bind(f,x)(),但是当f有更多参数时,这个解决方案会变得更复杂.
以下代码:
int main() {
int a, b, c, d, e, f, g;
auto func = [&](){cout << a << b << c << d << e << f << g << endl;};
cout << sizeof(func) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出56用g ++ 4.8.2编译
由于所有局部变量都存储在同一堆栈帧中,因此记住一个指针足以定位所有局部变量的地址.为什么lambda表达式构造了如此大的未命名函数对象?