這是我在同一主題上寫的另一個答案的修改版本。現在版本3。
主要問題是名稱衝突,因爲如果您的代碼中有一個名爲count
的變量,並且您的代碼爲using namespace std;
,那麼對於您的意思而言,它將是含糊不清的。這不僅僅是count
。 reverse
和equal
也將被包括在內,這些都是通用的標識符。例如,這會導致編譯錯誤:
#include <algorithm>
using namespace std;
int count;
int main(int argc, char* argv[]){
count = 1;
}
不顧一切問題的編譯器,它也是人來閱讀你的代碼中的問題。這些額外的5個字符確保旁邊的人維護你的代碼的已知,你的意思到底是什麼,而不必檢查文件的頂部每隔一條線,看看你的意思std::string
或mylib::string
當你寫string
它也值得注意的是,你不應該把using namspace xyz
放在頭文件中,因爲它可以傳播到包含該頭文件的所有文件,即使它們不想使用該名稱空間。這裏的另一個問題是std命名空間還沒有被導入,所以維護者(或者你在3個月的時間裏)添加了一個變量,其名稱與包含在同一個編譯單元中的一些不起眼的std函數相同,然後花一個小時試圖找出編譯錯誤的原因。
(從C++有效),在大多數情況下,這是非常有利於使用
using std::swap
彷彿有交換的專用版本,編譯器會使用,否則會依傍std::swap
。如果您致電std::swap
,則始終使用基本版本,該版本不會調用專用版本(即使它存在)。
例如使用pimpl idiom的代碼。作爲默認拷貝可以拷貝實際實現中的所有數據,因爲所有需要做的就是交換指針。使用專門的交換可以節省大量的執行時間,精心設計的庫應該專門化它。
綜上所述,
總是喜歡在由於傳播一切代價頭using std::swap
在std::swap()
避免using namespace std
,儘量避免在實現文件中使用它。
成千上萬的using std::foo
在每個文件的頂部是不是要走的路。最多用於常用類。
其他都是意見。
Dupe of http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-a-bad-practice-in-c在許多許多人中間。 – 2010-01-16 13:28:55
你是對的!爲什麼我沒有找到那些當我搜查?對不起 – Mawg 2010-01-16 13:44:54