主要结束时y的值是多少?
const int x = 5;
int main(int argc, char** argv)
{
int x[x];
int y = sizeof(x) / sizeof(int);
return 0;
}
y是5
main的末尾的局部变量x的值是什么?
int x = 5;
int main(int argc, char** argv)
{
int x = x;
return 0;
}
x未定义
答案 0 :(得分:1)
宣布
时int x[x];
全局x
用于定义数组的大小。 x
中的[]
是全局变量,因为局部变量的声明尚未完成。
在第二种情况下,
int x = x;
是未定义的行为,因为RHS上的x
与LHS上的x
相同,因为x
的声明在时间x
上完成遇到RHS。
这些在C ++ 11标准中描述:
3.3.2声明要点
1名称的声明紧跟在其完整的声明者(第8条)之后和其初始化者之前(如果有的话),除非如下所述。 [示例:
int x = 12;
{int x = x; }这里第二个x用它自己的(不确定的)值初始化。 - 结束示例]
2 注意:来自外部作用域的名称在隐藏它的名称声明之前仍然可见。[示例:
const int i = 2; { int i[i]; }
声明一个包含两个整数的块范围数组。 - 结束示例] - 结束记录]