如何在 lambda 表达式C++中使用 goto 语句
How to use goto statement in lambda expression C++
有什么方法可以在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.
有什么方法可以在 lambda 表达式中使用 goto 语句吗?
不。不要离开 lambda 的范围并跳到封闭范围。您只能在 lambda 中goto
带标签的语句,就像它是任何其他函数一样。
话虽如此,goto
在C++中的用途很少且很少见。还有其他更好的选择。我敦促你不要把goto
作为你使用的第一个工具。
您不能使用goto
在函数之间移动,并且 lambda 为其封闭范围定义了一个单独的函数。
从这个参考
goto
语句必须与它所引用的标签处于同一功能中,它可能出现在标签之前或之后。
而标准,[stmt.goto]
goto
语句无条件地将控制权移交给由标识符标记的语句。标识符应为位于当前函数中的标签。
goto
语句将控制权转移到 label 指定的位置。goto
语句必须与它所引用的标签处于同一功能中,它可以出现在标签之前或之后。
您可以改为执行以下操作:
#include <iostream>
int main()
{
auto lambda = []() {
goto label;
return;
label:
std::cout << "hello, world!" << std::endl;
};
lambda();
return 0;
}
它将打印"你好世界"。请参阅演示。
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 如何正确指定 goto 语句的标签?
- 使用 goto 语句C++块进行 python化
- 这是 c++ 中一个好的 goto 语句吗?
- 这段代码如何在没有任何循环语句或'goto'或递归的情况下循环?
- 如何在 lambda 表达式C++中使用 goto 语句
- C++ goto 语句执行而不调用
- 如何创建包含 goto 语句的主菜单函数
- 从嵌入式C/C++逻辑中去掉goto语句
- C++中goto语句对堆栈的影响
- 可以定义一个带有goto语句和标签的宏吗
- 替换goto语句
- 我如何用等价的结构化语句替换continue和goto语句
- 我应该在这里使用goto语句吗
- Java中有goto语句吗?
- 使用什么而不是Goto语句
- 多个返回语句或"goto end;"
- 与调用函数相比,goto语句效率高吗?