gpt4 book ai didi

c++ - 与mind中的变量decleare和命名空间中的声明不冲突

转载 作者:行者123 更新时间:2023-12-03 12:47:09 26 4
gpt4 key购买 nike

我正在研究 C++ 命名空间,我编写了一个简单的代码来理解它。特别是我编写了这段代码,但我不明白为什么它没有给我编译器错误,即我已经声明了变量“a”。编译器是否以某种方式帮助我?

#include<iostream>
using namespace std;
namespace funzioni_e_altro
{
int a=5;
int b=20;
int c=10;
}
int main()
{
using namespace funzioni_e_altro;
int a=0;
cout<<funzioni_e_altro::a<<"\n";
cout<<b<<"\n";
cout<<a<<"\n";
return 0;
}

我希望它给我一个编译器错误,但它给了我输出:
5
20
0

最佳答案

using 指令使命名空间中的名称可用于非限定名称查找。但它不会在 block 中引入任何新的声明。当您在 main 中声明 a 时,它会隐藏 using 指令可能引入的名称。该 a 不是在 main 内进行非限定名称查找时不再考虑。

所以当你在main中写a时,它只能引用局部变量。就好像 main 中根本不存在 using 指令一样。

此行为是有意为之。它可以防止完全困惑的发生。如果需要,using 指令不应阻止代码在其自己的作用域中声明名称。并且您始终可以通过完全限定其名称来引用命名空间中的变量。

关于c++ - 与mind中的变量decleare和命名空间中的声明不冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56092705/

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