#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
我的代码中的变量)?
正如引用的文本所说,goto
只有当变量在goto
语句点的范围内,但不在目标标签的范围内时,变量才会被销毁。b
在这两个点都在范围内,因此它不会被破坏。只是j
被破坏了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句