在 C++ 中使用 goto 语句销毁变量是如何发生的?

罗马
#include <iostream>
using namespace std;
int main() {
    if (true) {
        int b = 3;
    label_one:
        cout << b << endl;
        int j = 10;
        goto label_one;
    }
}

上面代码中goto跳转到label_one,使得变量j在每个循环中被销毁和重构。但是b变量会发生什么它是被摧毁和重建还是从未被摧毁?根据 C++ ISO:

移出循环、移出块或返回具有自动存储持续时间的已初始化变量涉及销毁具有自动存储持续时间的对象,这些对象在转移点的范围内,但不在转移到的点的范围内。

我的解释是if范围内的所有变量都应该被销毁,但如果是这样,它们什么时候重新初始化(b我的代码中的变量)?

Brian Bi

正如引用的文本所说,goto只有当变量goto语句点的范围内,但不在目标标签的范围内时,变量才会被销毁b在这两个点都在范围内,因此它不会被破坏。只是j被破坏了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章