我正在將some C++集成到somelse的一箇中,並發現我們採用了兩個不同的策略,即使用命名空間命令來使用。C++'使用命名空間'的合適位置
對於源代碼的清潔程度,哪一個是最正確的解決方案?
namespace foo
{
using namespace bar;
}
或
using namespace bar;
namespace foo
{
}
非常感謝您的幫助,
T.
我正在將some C++集成到somelse的一箇中,並發現我們採用了兩個不同的策略,即使用命名空間命令來使用。C++'使用命名空間'的合適位置
對於源代碼的清潔程度,哪一個是最正確的解決方案?
namespace foo
{
using namespace bar;
}
或
using namespace bar;
namespace foo
{
}
非常感謝您的幫助,
T.
兩者是不等價的。在第一種情況下,命名空間bar
被導入到命名空間foo
中,因此每bar::x
可以將其作爲foo::x
訪問。在後者中,命名空間bar
被導入到全局命名空間(或包裝了這兩個命名空間的命名空間)中,它可以作爲::x
被訪問。
我建議您始終爲您選擇最窄的解決方案。甚至只在你實際需要的函數中包含名稱空間。所以如果你有疑問,請和第一個一起去。
這個問題已經回答了,但是我想重申一下Toby Speight
提出的問題。 一個人不應該寫如using namespace bar
。
好的做法是使用using
作爲長/層次結構的別名幫助。像
using po = boost::program_options;
,然後使用問題提出了兩個備選方案
po.notify(vm);
要麼只用於討論或面談好。
+1爲「儘可能最窄」。我幾乎從不寫'使用命名空間' - 幾乎總是隻使用命名空間中需要的特定名稱。 –
@TobySpeight當然。對此的例外是象'std :: literals'或'std :: placeholders'這樣的命名空間,這些命名空間被設計成包含在其中。 – Shoe
@Jefffrey同意,雖然因爲提升首先到達那裏,甚至std ::佔位符可以是雷區。 std :: literals是唯一安全的。 –