我试图低于该虚设码来测试未命名的名称空间。命名空间具有相同的变量具名命名空间声明
我有以下的输出
ctor 1
ctor 0
3
5
我对此感到有点困惑。
- 我是在编译器说,它不能解析 歧义关于
a::m_a
期待一个错误。相反,它始终指向嵌套较少的 。情况总是如此吗? C++遵循什么规则? - 看来,编译器下面写在文件中的顺序 创建变量CMyObj。情况总是如此吗?
- 有没有什么办法来访问最嵌套
m_a
变量 从main()
?
class CMyObj{
public:
CMyObj(int a){std::cout << "ctor " << a << std::endl; }
};
namespace a{
namespace{
int m_a=4;
int m_b=5;
CMyObj m_obj(1);
}
}
namespace a{
int m_a=3;
CMyObj m_obj(0);
}
int main(){
std::cout << a::m_a << std::endl; // which one?
std::cout << a::m_b << std::endl; // how this is possible?
return 0;
}
最后一句是关键。谢谢。 –
嗨基因!非常感谢您的回放(延迟一段时间)! –