在循环之外使用for循环变量是错误的吗?

Is it wrong to use a for loop variable outside the loop?

本文关键字:循环 错误 变量 for      更新时间:2023-10-16

例如,考虑以下代码:

#include <iostream>
int main() {
    for( int i=0; i<10; i++ );
    // USING i OUTSIDE for LOOP
    std::cout << i;    
    return 0;
}

当我在g++下编译它时,它说"名称查找' i '更改为ISO ' for '作用域,(如果您使用' -fpermissive ' g++将接受您的代码)"

我认为问题是范围。变量i在for范围内声明,并在该范围外使用。当我提出要求时,我们的老师允许这样做。是错的吗?

ISO 'for'作用域指的是c++标准。在旧的标准中(或者更可能是支持它的旧编译器),循环变量的作用域是包含for语句的作用域。然而,这改变了,这就是为什么你得到这个错误。

关于这类错误提到-fpermissive的一般提示:导致这些消息的结构通常是(长)过时的,并且被旧标准或旧编译器允许。因此,存在依赖于过时行为的旧代码。你不应该编写需要这个选项的新代码;

是不对的。如果你想在循环外使用一个值,请在循环外定义它。

int i;
for (i=0; i<10; ++i);
std::cout << i << "n";

变量i没有在循环外定义。这会导致编译时错误。你可以这样做:

int i = 0;
for(i; i < 10; ++i);
std::cout << i;

在这种情况下,i被定义在for-loop之外,所以我可以"看到"它

是的,在现代c++标准中,使用for循环中声明的变量是不可能的。要了解更多细节,您可以参考cplusplus.com,这是一个包含基于最近标准变化的所有信息的网站。我个人的建议是,不要盲目地听从别人的建议,自己去探索,然后模仿别人的变化。