我对这个功能非常陌生,我只是在c ++中阅读Lambda表达式并尝试在一个简单的程序中实现它。
int main()
{
std::string name;
int a = 5;
std::cout << "What is your name? ";
getline (std::cin, name);
for([&](){a = 7;};a > 0; a--)
{
std::cout << "Hello, " << name << "!\n";
}
}
但它没有像我想的那样工作..
我的假设:[&](){a = 7;}
这会将变量a的值从5改为7,但不是......
代码有什么问题吗?或者只是我的假设不正确?
答案 0 :(得分:1)
如果调用,您的假设是正确的。
[&amp;]:通过引用隐式捕获。可以使用所有本地名称。所有局部变量都是 通过引用访问。
您可以访问本地变量,但不会调用lambda本身。这就是您的代码中发生的事情:
Lambda Expression without capture -> functionPtr -> bool (true for non-null functionPtr)
其中->
是隐式转化
而是(lambdaExpression)()
或lambdaExpression()
来调用它。