C++ 局部变量如何隐藏全局变量
main结尾的y值是多少C++ 局部变量如何隐藏全局变量,c++,c++11,C++,C++11,main结尾的y值是多少 const int x = 5; int main(int argc, char** argv) { int x[x]; int y = sizeof(x) / sizeof(int); return 0; } int x = 5; int main(int argc, char** argv) { int x = x; return 0; } y是5 main末尾的局部变量x的值是多少 const int x = 5;
const int x = 5;
int main(int argc, char** argv)
{
int x[x];
int y = sizeof(x) / sizeof(int);
return 0;
}
int x = 5;
int main(int argc, char** argv)
{
int x = x;
return 0;
}
y是5
main末尾的局部变量x的值是多少
const int x = 5;
int main(int argc, char** argv)
{
int x[x];
int y = sizeof(x) / sizeof(int);
return 0;
}
int x = 5;
int main(int argc, char** argv)
{
int x = x;
return 0;
}
x是未定义的
申报时
int x[x];
全局x
用于定义数组的大小。[]
中的x
是全局变量,因为局部变量的声明尚未完成
在第二种情况下
int x = x;
是未定义的行为,因为RHS上的x
与LHS上的x
相同,因为在遇到RHS上的x
时,x
的声明已完成
这些在C++11标准中有描述:
3.3.2声明要点
1名称的声明点紧跟在其完整声明人(第8条)之后和其初始值设定人(如有)之前,除非下文另有说明。[示例:
int x=12;{int x=x;} 这里,第二个x用它自己的(不确定)值初始化。-结束示例] 2注意:外部作用域中的名称在声明隐藏它的名称之前保持可见。[示例: 声明两个整数的块作用域数组。-结束示例]-结束注释] 看,也看