我試圖低於該虛設碼來測試未命名的名稱空間。命名空間具有相同的變量具名命名空間聲明
我有以下的輸出
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;
}
最後一句是關鍵。謝謝。 –
嗨基因!非常感謝您的回放(延遲一段時間)! –