我正在尝试使用C ++ 11 Lambda来初始化类的const
成员变量。
一个简单的例子:
class Foo
{
public:
const int n_;
Foo();
};
Foo::Foo()
: n_( []() -> int { return 42; } )
{
}
int main()
{
Foo f;
}
在MSVC10中,这会产生:
error C2440: 'initializing' : cannot convert from '`anonymous-namespace'::<lambda0>' to 'const int'
在IDEONE中,这会产生:
prog.cpp: In constructor 'Foo::Foo()':
prog.cpp:9:34: error: invalid conversion from 'int (*)()' to 'int'
我开始意识到我不能在类的初始化列表中使用lambdas。
我可以吗?如果是这样,那么正确的语法是什么?答案 0 :(得分:23)
您正尝试将lambda转换为int - 您应该调用lambda:
Foo::Foo()
: n_( []() -> int { return 42; }() ) //note the () to call the lambda!
{
}
答案 1 :(得分:7)
您的变量声明为int
。
你想调用 lambda吗?这应该有效:
n_(([]() -> int { return 42; })())
或者您想要一个std::function<>
类型的变量?
答案 2 :(得分:2)
你正在创建一个lambda,就像编译器所说的那样,你试图将lambda本身存储在n _中。