以下代码是否有效?如果是这样,x
的范围是什么?
int main()
{
if (true) int x = 42;
}
我的直觉说if
没有创建范围,因为没有实际的块({}
)跟随它。
答案 0 :(得分:25)
GCC 4.7.2向我们展示了,虽然代码有效,the scope of x
is still simply the conditional。
这是由于:
[C++11: 6.4/1]:
[..] selection-statement 中的子语句(每个子语句,else
形式的{{1} })语句隐式定义块范围。 [..]
因此,您的代码等同于以下内容:
if
语法上的有效因为选择语句的生成因此(int main()
{
if (true) {
int x = 42;
}
}
):
选择语句:
[C++11: 6.4/1]
(条件)声明
if
(条件)声明if
声明
else
(条件)声明
和switch
是语句(int x = 42;
}):
语句:
标记的语句
attribute-specifier-seq opt expression-statement
attribute-specifier-seq opt 复合语句
attribute-specifier-seq opt selection-statement
attribute-specifier-seq opt iteration-statement
attribute-specifier-seq opt jump-statement
的 声明陈述 强>
attribute-specifier-seq opt try-block
答案 1 :(得分:2)
我的Visual Studio说变量x的生命时间非常小 - 就在我们进入运营商的时候, 因此,当我们处于条件之外时,x将被销毁,并且绝对没有任何意义 声明这样的变量。