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

时间:2015-09-02 12:04:06

标签: c++ compiler-errors scope

例如,请考虑以下代码:

#include <iostream>

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

    // USING i OUTSIDE for LOOP
    std::cout << i;    
    return 0;
}

当我在g ++下编译它时,它表示&#34;'i'的名称查找为ISO'更改为'范围',(如果你使用'-fpermissive'G ++将接受你的代码)&#34

我认为问题在于范围界定。变量i在范围内声明,并在其外部使用。当我问起时,我们的老师允许这样做。 是不是错误?

4 个答案:

答案 0 :(得分:6)

“范围的 ISO”是指C ++标准。在旧标准(或者更可能是支持它的旧编译器)中,循环变量的范围是包含for语句的范围。但是,这改变了,这就是你得到这个错误的原因。

关于提及 -perpermissive 的此类错误的一般提示:导致这些消息的构造通常(很久)已过时,并且被旧标准或旧编译器所允许。因此,存在依赖于过时行为的旧代码。您不应该编写需要该选项的新代码;更快速地解决了在新GCC版本上快速运行遗留代码的问题。

答案 1 :(得分:4)

是的,这是错的。 如果要使用循环外的值,请在循环外定义它。

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

答案 2 :(得分:1)

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

int i = 0;
for(i; i < 10; ++i);

std::cout << i;

在这种情况下,i是在for-loop之外定义的,所以我可以“看到”它

答案 3 :(得分:0)

是的,在现代C ++标准中有效的所有更改都无法在for循环中使用变量声明。有关详细信息,您可以随时参考cplusplus.com,该网站包含基于标准最近更改的所有信息。 个人的建议是,不要盲目地接受别人的建议,自己探索,然后模仿变化。