以下代码是否有效?
const int var = 10;
{
int var[var]; // why doesn't this give any error ?
}
注意:代码在我的g ++编译器上编译。
答案 0 :(得分:19)
AS-是?不,如果它在功能体内?是。
第一行声明一个名为var
的整数常量,其值为10
。
大括号开始了一个新区块。在该块中,声明了一个名为var
的新变量,该变量是int
的数组,其大小等于先前声明为var
的整数常量的值({{1 }})。
关键是10
引用第一个变量,直到之后名为var
的第二个变量被完全声明。在第二个声明后面的分号和右括号之间,var
指的是第二个变量。 (如果第二个变量有一个初始化器,var
将在初始化器之前开始引用第二个变量。)
答案 1 :(得分:5)
是的,代码是有效的C ++。在本地var
声明之前,非本地var
可见。
因此int var[var]
定义了一个包含10个整数的本地数组。
答案 2 :(得分:1)
是的,代码是有效的C ++ 这是SCOPE的概念:隐藏名称
const int var = 10;
{
int var[var]; // why doesn't this give any error ?
}
我认为此链接可以解除您的怀疑
IN C ++:
http://msdn.microsoft.com/en-US/library/9a9h7328%28v=VS.80%29.aspx
在C:
如果你想要深入的知识关于这个:去这个链接,这里的信息是关于词汇与动态范围
http://en.wikipedia.org/wiki/Scope_%28programming%29
但是在您的代码中: var 的可见性的“范围 :: ”。它与本地和非本地变量不同。 内括号 {x = 1; } 局部变量。在这里{y = 1; {x = 1;} },这里有所不同。
有用的链接
http://msdn.microsoft.com/en-us/library/b7kfh662%28VS.80%29.aspx
http://www.awitness.org/delphi_pascal_tutorial/c++_delphi/c++_scope_variables.html