2009-08-13 56 views

回答

15
namespace foo=bar; 

這不影響任何名稱查找規則。唯一的影響是將'foo'作爲'bar'的別名。例如:

namespace bar 
{ 
    void b(); 
} 

void f() { 
    bar::b(); // Call 'b' in bar 
    foo::b(); // 'foo' is an alias to 'bar' so calls same function 
} 

下面是變化的查找規則

namespace NS 
{ 
    namespace bar 
    { 
    } 

    namespace foo { 
    using namespace bar; 

    void f() { 
     ++i; 
    } 
    } 
} 

查找時發生了「我」,「富」將首先搜索,然後「NS」然後「吧」。

+0

很抱歉,很遲才發表評論,但我想其他人可能正在搜索。使用命名空間欄語句只會將當時定義的那些東西帶入到foo命名空間中。簡而言之,它可以創建錯誤的訂單依賴關係。請參閱Sutter/Alexandrescu的C++編碼標準中的項目#59 – 2016-12-09 18:45:48

+0

@RobL:使用_declaration_僅引入當時聲明的名稱。以上是使用_directive_。前者就像是從命名空間到當前範圍的名稱重新聲明。後者更像是一個查找規則,如果你在這裏沒有找到它,那麼檢查這個其他的命名空間。 – 2016-12-16 09:37:56

2

當你將一個命名空間導入到另一個命名空間時,那麼是的,它應該在這方面是平等的。但是,第二個也允許放置其他代碼,所以你也可以將其中的而不是的部分放在其中。前者只是創建一個別名。

+0

如果將名稱添加到名稱空間'foo'中,則不同的查找規則可能會導致在兩個示例之間找到不同的名稱。 – 2009-08-13 10:59:09

相關問題