gpt4 book ai didi

c++ - 为什么局部变量不隐藏数组定义中的全局变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:25 26 4
gpt4 key购买 nike

最近在复习C++的精妙之处。我发现了一个有趣的问题。您能否检查一下并分享您的推理原因。

谢谢

const int x = 5;

void func() {
// ! Error
// int x = x;

// ! Fine
int x[x];
x[0] = 12;
cout << x[0];
}

最佳答案

变量的声明点(即名称采用声明赋予它的含义的点,在更广泛的范围内隐藏任何其他具有相同名称的实体)在声明符之后,在声明符之前任何初始化程序。所以这个:

int x = x;
^ point of declaration

用它自己的未初始化值初始化局部变量 x,给出未定义的行为(尽管它仍然是格式正确的,所以编译器不应该拒绝它,除非你要求它)。

同时:

int x[x];
^ point of declaration

在声明符中使用全局常量 x,它的格式和定义都很好。它可能会让人类读者感到困惑,但对编译器来说没有问题。

这个规则的基本原理是在它自己的初始化器中使用变量的地址(而不是值)是合理的,一个简单的例子是

void * p = &p;

关于c++ - 为什么局部变量不隐藏数组定义中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28679384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com