小编use*_*691的帖子

在c ++ 11中,如何调用任意可调用对象?

可调用的概念在http://en.cppreference.com/w/cpp/concept/Callable中定义.

假设我有一个可调用对象f,它有一个类型为T*的参数并返回类型为void.f可以是任何可调用类型(函数对象,指向成员函数的指针,指向数据成员的指针等).我怎么能调用f?

简单地调用f(x)失败,因为f可以是指向成员函数或数据成员的指针.有一个简单的方法来调用f吗?一种可能的解决方案是std :: bind(f,x)(),但是当f有更多参数时,这个解决方案会变得更复杂.

c++ callable

10
推荐指数
2
解决办法
3648
查看次数

当C++ lambda表达式通过引用具有大量捕获时,未命名的函数对象的大小变大

以下代码:

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表达式构造了如此大的未命名函数对象?

c++ lambda g++4.8

6
推荐指数
1
解决办法
887
查看次数

标签 统计

c++ ×2

callable ×1

g++4.8 ×1

lambda ×1