2015-10-19 20 views
5

我正在將some C++集成到somelse的一箇中,並發現我們採用了兩個不同的策略,即使用命名空間命令來使用C++'使用命名空間'的合適位置

對於源代碼的清潔程度,哪一個是最正確的解決方案?

namespace foo 
{ 
    using namespace bar; 
} 

using namespace bar; 

namespace foo 
{ 
} 

非常感謝您的幫助,

T.

回答

7

兩者是不等價的。在第一種情況下,命名空間bar被導入到命名空間foo中,因此每bar::x可以將其作爲foo::x訪問。在後者中,命名空間bar被導入到全局命名空間(或包裝了這兩個命名空間的命名空間)中,它可以作爲::x被訪問。

我建議您始終爲您選擇最窄的解決方案。甚至只在你實際需要的函數中包含名稱空間。所以如果你有疑問,請和第一個一起去。

+1

+1爲「儘可能最窄」。我幾乎從不寫'使用命名空間' - 幾乎總是隻使用命名空間中需要的特定名稱。 –

+0

@TobySpeight當然。對此的例外是象'std :: literals'或'std :: placeholders'這樣的命名空間,這些命名空間被設計成包含在其中。 – Shoe

+0

@Jefffrey同意,雖然因爲提升首先到達那裏,甚至std ::佔位符可以是雷區。 std :: literals是唯一安全的。 –

0

這個問題已經回答了,但是我想重申一下Toby Speight提出的問題。 一個人不應該寫如using namespace bar

好的做法是使用using作爲長/層次結構的別名幫助。像

using po = boost::program_options; 

,然後使用問題提出了兩個備選方案

po.notify(vm); 

要麼只用於討論或面談好。

+0

「一個人不應該使用'使用名稱空間欄'來寫東西。」我完全不同意。某些名稱空間是用'using namespace'導入的。就像幾乎任何其他的絕對你可以堅持編程,總是有例外。 – Shoe

+0

我在重申討論的點http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice – gjha

+0

我的問題沒有在該討論中回答。 我問的是2中的最佳做法,而不是他們中的一個是否被認爲是壞的。 – Tambo