例如,请考虑以下代码:
#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在范围内声明,并在其外部使用。当我问起时,我们的老师允许这样做。 是不是错误?
答案 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,该网站包含基于标准最近更改的所有信息。 个人的建议是,不要盲目地接受别人的建议,自己探索,然后模仿变化。