与main内部的变量decleare和namspace内部的变量decleare没有冲突

时间:2019-05-11 17:28:06

标签: c++ namespaces

我正在研究c ++命名空间,并编写了一个简单的代码来理解它。特别是我编写了这段代码,但我不明白为什么它没有给我编译器错误,而我已经清除了变量“ a”。编译器在某种程度上对我有帮助吗?

else

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

1 个答案:

答案 0 :(得分:0)

using指令使名称空间中的名称可用于非限定名称查找。但是它没有在块中引入任何新的声明。当您在a中声明main时,它会隐藏使用指令可能带来的名称。a在{{ 1}}。

因此,当您在main中写入a时,它只能引用局部变量。就像在main中根本没有使用指令一样。

此行为是有意的。它可以防止发生完全的混乱。 using指令不应阻止代码在需要时在其自己的范围内声明名称。而且,您可以总是通过完全限定其名称来引用命名空间中的变量。