我之前有一个问答:Point of declaration in C++。规则声明点很好地适用于许多情况。auto
现在,我对结合使用这个规则感到困惑。
考虑这两个代码:
一世。x
自行声明(我们不希望它起作用):
{
auto x = x;
}
ii. x
由外部声明内部x
(它在 gcc 4.8.x 中出错):
{
int x = 101; // the outer x
{
auto x = x; // the inner x
}
}
根据声明点规则,它应该可以工作,但不能。似乎标准中还有一条我错过了的规则。问题是,使用时的声明点在哪里auto
?
有两种可能:
一世。如果声明点在 after =
,则在语句末尾:
auto object = expression;
^
Is it here? If it is, why gcc complains?
所以第二个声明是有效的并且必须有效,因为x
除了那个外部声明(之前声明过)之外没有其他声明。因此auto x=x
是有效的,内部x
应该分配给101
.
ii. 如果声明点在之前=
:
auto object = expression;
^
好吧,这没有任何意义,因为auto
必须等到看到下面的表达式。例如auto x;
无效。
更新:我需要一个通过声明的规则点来解释它的答案。