C++ 局部变量如何隐藏全局变量

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;

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;
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注意:外部作用域中的名称在声明隐藏它的名称之前保持可见。[示例:

声明两个整数的块作用域数组。-结束示例]-结束注释]

看,也看