【发布时间】:2012-12-28 10:55:43
【问题描述】:
我是 C++ 新手,遇到了这个问题:
for (int i=0 ; i<500 ; i++) {
//to do
}
int i;
std::cin >> i;
更新:使用 Visual Studio 2010(及其使用的编译器)for 循环外的 i 在调用 cin >> i 之后的值为 500;我正在使用 Visual Studio 调试器查看值
现在我期待
a) 整数 i;在 for 循环和 int i=0 之外;成为不同的变量,即 for 循环 i 一旦大括号关闭就会超出范围
b) 一旦我意识到它没有超出范围,我想知道为什么它没有被 cin 覆盖。
我认为 b) 是故意的(尽管我在 Bjarne Stroustrup 关于 c++ 的书中找不到它所在的页面),但我确信它在同一本书中指出变量在它们所包含的大括号内具有范围。
在我知道的大多数其他语言中,当在 for 构造中声明变量时,它们被认为位于 for 循环的大括号中,但在 c++ 中似乎并非如此。
是这种情况吗,这是否特定于 for 循环,或者是否有其他情况发生这种情况(我想不出任何其他情况,但嘿,我是新人)
谢谢
【问题讨论】:
-
是什么让您相信它不会超出范围? for循环中的
i只在for循环中有效。 -
除非您使用的是旧版 Microsoft 编译器,它没有正确实现规范。
-
@GregHewgill,对,我想我对那件事有微弱的记忆。你确认了。
-
无论我在控制台输入什么,我都在使用 Visual Studio 2010 编译器和 cin>>i == 500 之后的 i 变量
-
你怎么看
i的值是多少?您是在使用调试器,还是实际上用std::cout << i或其他东西打印值?如果您使用的是调试器,请记住,您不能总是相信调试器告诉您的内容,尤其是当您在同一个函数中有两个不同的变量同名时。
标签: c++ visual-studio-2010 scope