2013-12-13 64 views
1

我現在可以看到爲什麼它會是不好的做法,包括使用命名空間std和模板類

using namespace std; 

在一個項目的頭文件。我聽說在private .cpp函數定義文件中包含這個指令並不是什麼大問題,因爲它們通常不直接包含在main()中。模板類有沒有例外,它通常必須包含.cpp定義文件才能正確編譯和運行(除非將定義直接包含在頭文件中)?

所以,將一般的規則是:

1)不要在頭文件中使用命名空間std使用。 2)可以在私人.cpp定義文件中使用它,除非定義適用於模板類。

+0

在頭文件中定義模板,並在整個文件中使用(例如)std :: string。 – clcto

+0

好的。這是否意味着如果你在私人的.cpp文件中使用std命名空間,那麼它就不那麼皺眉了?或者,如果爲與某些包含的其他名稱空間中定義的函數衝突的庫發佈新函數,會導致問題出現? –

+0

第三方包含文件(或者甚至在您自己的包含文件中)的更改可能在「使用命名空間」之後引入衝突,但是這些衝突將被隔離到單個cpp文件,因此比「使用命名空間「在一個模塊中,一個標題引發了模塊B中的衝突。 –

回答

5

我使用的規則是「不要使用」使用命名空間「或命名空間別名在任何打算成爲#include目標的文件中。」

此外,作爲一般規則,「使用命名空間」或命名空間別名應出現在文件中的所有#includes之後。

+0

不錯。我會採納的。 –

+0

+1表示使用*語句之後的包含文件 – Bukes