日期:2014-05-17  浏览次数:20825 次

求助,循环内部定义的变量会影响到外部,这是怎么回事

while(true)
{
  string aaa;
}
string aaa;

这么干是不允许的,vs报告
不能在此范围内声明名为“aaa”的局部变量,因为这样会使“aaa”具有不同的含义,而它已在“子级”范围中表示其他内容了.
vs2012,这是为什么,循环内部定义的变量作用域不是只在循环内部的吗,为什么会影响到外部的定义?

------解决方案--------------------
引用:
这个我是以前完全没注意到,请问这个约束规则是如何起作用的,具体的约束规则是什么,我没有google到?

编译器直截了当地告诉你了啊!代码块内外不能重复声明相同名字的变量,因为这会让看似融合在一起的代码块中的变量具有诡异的、不为人注意的另一个含义。
------解决方案--------------------
写代码本来就是严谨的事,对于这些错误只要避免就行,局部变量和全局变量在开发工具中是有严格把控的,这些本来不是语言的问题,从而给加上也另外一个锁,是的语言本身有了某些规矩,而我们要想用这些开发工具就必须遵守工具的规律,与语言无关!