我正在研究c ++命名空间,并编写了一个简单的代码来理解它。特别是我编写了这段代码,但我不明白为什么它没有给我编译器错误,而我已经清除了变量“ a”。编译器在某种程度上对我有帮助吗?
else
我希望它给了我一个编译器错误,但是它给了我输出:
5
20
0
答案 0 :(得分:0)
using指令使名称空间中的名称可用于非限定名称查找。但是它没有在块中引入任何新的声明。当您在a
中声明main
时,它会隐藏使用指令可能带来的名称。a
在{{ 1}}。
因此,当您在main
中写入a
时,它只能引用局部变量。就像在main
中根本没有使用指令一样。
此行为是有意的。它可以防止发生完全的混乱。 using指令不应阻止代码在需要时在其自己的范围内声明名称。而且,您可以总是通过完全限定其名称来引用命名空间中的变量。