【发布时间】:2013-12-09 21:27:17
【问题描述】:
我在 Visual Studio 2010 中使用 C++ 并发现了一些奇怪的行为。长话短说,我发现这不会编译:
for (int i = 0; i < 10; i++)
{
int i = 11;
}
这似乎是正确的,因为变量 i 已经在 for 循环头中声明了。
现在,但是,如果我在重新声明 i 之前插入另一个 for 循环,那么突然编译器、智能感知等认为代码是正确的 - 没有给出真正的警告(尝试警告级别 3 和 4(/W3 和 / w4))。所以,这样做实际上会编译并运行:
for (int i = 0; i < 10; i++)
{
for(int j = 0; j < 5; j++)
{
}
int i = 11;
}
就我个人而言,我觉得很奇怪插入另一个 for 循环使原本相同的代码场景合法化。 有没有好心人能告诉我我在这里俯瞰什么?
提前致谢!
编辑: 哇,感谢大家的所有回复和演示 - 你太棒了! :) 这个暴露错误的示例确实让我想到了,我只是假设 MS 现在会注意到这样的事情并修复它......至少在 VS2013 中。
尝试按照建议更改优化设置,但没有任何区别。
谢谢大家!
感谢演示:@Mark Garcia
【问题讨论】:
-
是编译器还是智能感知?
-
@LuchianGrigore 编译器也是如此。 VS2012 也拒绝第一个 sn-p 并接受第二个。
-
是什么让您认为您忽略了某些东西?我100%同意你的评价。很奇怪。
-
打印调试代码:rextester.com/EJOYM5770
标签: c++ visual-studio-2010 for-loop scope