这段代码是有效的C ++吗?

时间:2010-10-13 05:04:45

标签: c++ declaration definition

以下代码是否有效?

const int  var = 10;
{ 
   int  var[var]; // why doesn't this give any error ?
}

注意:代码在我的g ++编译器上编译。

3 个答案:

答案 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://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fzexscope_c.htm

如果你想要深入的知识关于这个:去这个链接,这里的信息是关于词汇与动态范围

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