【发布时间】:2020-07-10 11:49:40
【问题描述】:
我对 c++ 很陌生,并且在命名空间方面遇到了麻烦。
#include <iostream>
int x = 10;
namespace ns {
int x = 5;
namespace ns_nested {
int z = x; //z is assigned a value of 5??
}
}
int main(){
std::cout << ns::ns_nested::z;
}
这打印出5。最初,我认为这是因为我只是将 x 的值从 10 更改为 5。
但如果我将 x 的第一个声明更改为 const int x = 10,它仍然会打印 5。
所以,我的问题是双重的:
虽然在全局范围内声明的变量是……嗯……全局的,因为只有一个实例可供所有人使用。那么,为什么/如何能够再次声明具有相同名称的变量的实例?
如果我将
z的值分配给全局声明的x的值,而不是外部命名空间中的值,我该怎么做?
【问题讨论】:
-
在
int z = x;x中正在搜索命名空间层次结构:首先是::ns::ns_nested::x,然后是::ns::x,然后是::x,::ns::x和::x不一样。 -
使用命名空间的原因之一是不同的事物可以具有相同的名称。我可以创建自己的
sort函数,它不会与标准排序冲突,因为它们的名称为std::sort和my::sort。这里有::x和ns::x。 -
@Mubin - 那么,为什么/我能够再次声明具有相同名称的变量的实例? - 你想知道
int x = 10; void fn() { int x = 5; }的相同吗? -
这能回答你的问题吗? Nested NameSpaces in C++
-
@Armali 是的,实际上。
标签: c++ namespaces