gpt4 book ai didi

C++ 允许重新定义全局(const)变量吗?

转载 作者:太空狗 更新时间:2023-10-29 23:30:29 26 4
gpt4 key购买 nike

我对全局常量有点困惑。我(初学者)的理解是“全局”变量是在 block 外定义的,并且具有程序范围(来源:http://www.learncpp.com/cpp-tutorial/42-global-variables/)。但是程序:

#include <iostream>

const double x=1.5;

int main(){
std::cout << "1) x=" << x << std::endl;
double x=2.5;
std::cout << "2) x=" << x << std::endl;
//const double x=3.5;
return 0;
}

在 g++(GCC,最新的 64 位版本)中编译没有任何问题,即使使用 -Wall。

输出:

1) x=1.5
2) x=2.5

这让我很困惑。第一个 cout 评估的事实意味着 main 将“x”识别为“全局”变量(它未在 main 的范围内定义)。如果是这样,为什么它让我重新定义“x”?

然后,如果您取消对已注释的第三个声明的注释,g++ 会抛出重新声明错误。意思是,在我定义的意义上,我的第一个声明不可能是“全局的”:S

编辑:好的,问题与全局变量无关,而是范围:例如 http://pastebin.com/raw.php?i=V5xni19M 中的相同问题

最佳答案

#include <iostream>

const double x=1.5;

此时在代码中,全局范围内有一个名为x的对象,类型为const double

int main(){
std::cout << "1) x=" << x << std::endl;

此时,仍然只有一个 x 可见(全局的),所以这就是名称 x 所指的。

        double x=2.5;

此时在代码中,您已经将名为 x 的对象引入了 main() 的范围。该范围嵌套在全局范围内,因此现在您有两个名为 x 的对象:

  1. xconst double

  2. 类型的全局范围内
  3. xmain() 范围内,类型为 double

局部x 隐藏了全局x。如果你想访问 main() 中的全局 x,你可以将其引用为 ::x

    std::cout << "2) x=" << x << std::endl;
double x=3.5; //uncommented

不,您正在尝试将名为x另一个 对象引入main() 的范围。这是不可能的,该范围内已经有一个 x,因此它失败了。

关于C++ 允许重新定义全局(const)变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19320362/

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