我对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的值从5
更改为10
。
但是,如果我将x的第一个声明更改为const int x = 10
,它仍会打印5
。
所以,我的问题是双重的:
我虽然在全局范围内声明的变量是...很好...全局的,因为只有它的一个实例可供所有人使用。那么,为什么/如何能够再次声明具有相同名称的变量的实例?
如果我将z
的值分配给全局声明的x
的值,而不是外部命名空间中的值,我该怎么做?
答案 0 :(得分:2)
1)我虽然在全局范围内声明的变量是...很好...全局的,因为只有它的一个实例可供所有人使用。那么,为什么/如何能够再次声明具有相同名称的变量的实例?
namespace ns {
int x = 5;
namespace ns_nested {
int z = x; //z is assigned a value of 5??
}
}
这里x不是全局名称空间,它在名称空间ns下
2)如果我将z的值分配给全局声明的x的值,而不是外部命名空间中的x的值,我该怎么做?
看到这个你可能有个主意
#include <iostream>
const int x = 10;
namespace ns
{
int x = 5;
namespace ns_nested
{
int z1 = ::x; //global namespace
int z2 = ns::x; //ns namespace
}
}
int main()
{
std::cout << ns::ns_nested::z1<<std::endl;
std::cout << ns::ns_nested::z2<<std::endl;
}