有什么方法可以在lambda表达式中使用goto语句?
#include <iostream>
int main()
{
auto lambda = []() {
goto label;
return;
};
lambda();
return 0;
label:
std::cout << "hello, world!" << std::endl;
}
我希望控制台输出hello,world !,但是编译器给出了一个错误:
use of undeclared label 'label'
goto label;
^
1 error generated.
答案 0 :(得分:15)
在lambda表达式中可以使用goto语句吗?
不。不要离开lambda的范围,而跳到封闭的范围。您只能goto
在lambda中使用带标签的语句,就像其他函数一样。
话虽这么说,C ++中goto
的用法很少而且很少见。还有其他更好选项。我敦促您不要将goto
作为您使用的第一个工具。
答案 1 :(得分:9)
您不能使用goto
在函数之间移动,并且lambda为其包围范围定义了一个单独的函数。
goto
语句必须与它所引用的标签具有相同的功能,它可能出现在标签之前或之后。
goto
语句无条件地将控制权转移到由标识符标记的语句。标识符应该是当前函数中的标签。
答案 2 :(得分:5)