![](/img/trans.png)
[英]C++ VS2010 using namespace concurrency; No namespace with that name
[英]Difference between "using namespace name::space;" vs "namespace name::space{}"?
我在Ah
中定義了一個命名空間
namespace org::lib{
bool xyz = true;
}
我有B.cpp
#include A.h
namespace org::lib {
void function() {
if (lib::xyz){
//....
}
}
}
為什么lib::xyz
in void function()
能夠正確找到'xyz'? 由於我已經在B.cpp
中的org::lib
命名空間下,執行lib::xyz
將嘗試查找org::lib::lib
命名空間,它不存在。 我錯過了什么?
現在,如果我將B.cpp
更改為:
#include A.h
using namespace org::lib;
namespace{
void function() {
if (lib::xyz){
//....
}
}
}
現在lib::xyz
不明,我必須用xyz
替換它。
我想歸結起來,有什么區別:
using namespace org::lib
對比
namespace org::lib{
}
他們不是都在說“以下代碼現在位於命名空間 org::lib 下嗎?
名稱查找從 scope 名稱向外使用。
在第一個示例中, function
的定義嵌套在namespace lib
中,而命名空間 lib 嵌套在namespace org
中。 當查找lib
時,首先搜索 function 本身,然后是org::lib
,然后是org
,自然lib
就在那里。
在第二個示例中,來自org::lib
的名稱被引入全局命名空間中的 scope。 org
中的名稱沒有任何變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.