有没有一个C++版本在循环结束后将在for循环初始化中声明的变量保留在作用域中

Was there ever a version of C++ that kept a variable declared in the initialization of a for loop in scope after the loop ended?

本文关键字:循环 初始化 声明 作用域 保留 变量 for 有一个 C++ 版本 结束      更新时间:2023-10-16

例如:

for (int i = 0; i < 10; i++) {
    //Do something with i
}
cout << i;

这会有效吗?我正试图让15年前的c++在现代(如果你考虑Visual Studio 2008现代)IDE中编译,但它抱怨这样的事情。

这是编译器特有的功能(即语言扩展)。要在Visual C++中"允许"它,您需要设置/Zc:forScope-标志或/Ze标志。设置此标志可以使语言扩展允许for循环中定义的变量的范围扩展到该循环之外(但在其他编译器中不一定有效)。

是的,这是早期Microsoft编译器中的一个错误。解决方法很简单:只需将循环控制变量的声明移动到循环之外。

for (int i = 0; i < 10; i++) {
}
cout << i;

成为

int i;
for (i = 0; i < 10; i++) {                                        
}
cout << i;

不,从来没有这样的C++版本。在C++语言的所有版本中,此类变量的作用域都明确限制在循环中。

每当您看到这样的循环变量的范围扩展到循环之外时,它都是编译器中的一个错误(就像旧版本的Microsoft编译器中的情况一样)。