我遇到了一个符号:
int x = 4;
auto y = [&r = x, x = x+1]()->int {
r += 2;
return x+2;
}();
Run Code Online (Sandbox Code Playgroud)
你能解释一下这个陈述吗?我是C++ 03的用户,最近升级到C++ 11.从今天起我开始使用C++ 14并遇到了这个片段.
谢谢!
感谢@chris的维基百科参考.我找到的是 -
这里有很好的解释,他们不知道旧的lambda Ctures 11的Captures
在C++ 14中:
C++ 11 lambda函数通过value-copy或引用捕获在其外部作用域中声明的变量.这意味着lambda的value成员不能是仅移动类型.C++ 14允许使用任意表达式初始化捕获的成员.这允许通过值移动捕获并声明lambda的任意成员,而不在外部作用域中具有相应命名的变量.
这是通过使用初始化表达式完成的:
Run Code Online (Sandbox Code Playgroud)auto lambda = [value = 1] {return value;};lambda函数
lambda将返回1,这是value初始化的.声明的捕获从初始化表达式中推断出类型,如同auto.这可以通过使用标准
std::move函数来移动捕获 :Run Code Online (Sandbox Code Playgroud)std::unique_ptr<int> ptr(new int(10)); auto lambda = [value = std::move(ptr)] {return *value;};
所以上面的表达式将x更新为6,并将y初始化为7.