簡體   English   中英

“使用命名空間名稱::空間;”之間的區別 vs“命名空間名稱::空間{}”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM