2017-01-25 71 views
3

同意using namespace XXX不是一個好習慣。但是,在每個呼叫中​​加入前綴namespaces::不僅繁瑣,而且有時也令人惱火。例如,看一下下面的代碼,這是使用標準命名空間std使用namespace :: function比每個調用中的namespace ::前綴都要好嗎?

#include <iostream> 

int main() 
{ 
    std::cout << "Hello World" << std::endl; 
    return 0; 
} 

不過,我可以通過using關鍵字去掉僅通過導入函數本身重複std::作爲

#include <iostream> 
using std::cout; 
using std::endl; 
int main() 
{ 
    cout << "Hello World" << endl; 
    return 0; 
} 

有什麼爲什麼我不應該這樣做,而不是在所有語句中爲std ::添加前綴。如果沒有具體的原因,爲什麼這種方法不作爲前綴std::

我從C++規範瞭解到using std::func也會導入重載的定義。

+0

http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice – ashiquzzaman33

+0

恕我直言,你可以在測試目的中使用它。 – ashiquzzaman33

回答

4

使用命名空間限定的主要原因是它避免了名稱衝突,如本地名稱distancestd::distance相沖突。

避免限定的主要原因是代碼更短,而對於一些程序員(包括我)來說,則顯得更清晰,因爲它只讀爲英文。

名稱衝突的問題隨着代碼大小的增加而增加,所以這是一個標準:代碼越短,添加開銷以避免名稱衝突就越有意義。反之亦然,代碼庫越大,構建時間越長,避免名稱衝突的原因就越多。

一個主要規則:

永遠不要添加一條毯子using namespace...在全局命名空間中的頭文件。

但除此之外,這是一個所謂的工程決策:與你的直覺一起感受優點和成本以及醜陋性和可讀性和清晰度等等。

0

無論您使用

using namespace std; 

using namespace std::cout; 
using namespace std::end; 

沒有多大意義,如果它是在一個.cpp文件。由此產生的任何名稱衝突都可以在本地修復。

當涉及到頭文件時,反對它們的用法非常強大。

我不會太擔心在.cpp文件兩種方法

相關問題