2016-02-02 67 views
1

我新工作場所的代碼在開始時使用看似冗餘的作用域分辨率來訪問命名空間。例如,::std::vector<int>而不是std::vector<int>[1]我從來沒有見過以前用這種方式完成名稱空間訪問。使用:: namespace :: something命名空間:: something有什麼好處?

我能想到的一個有點設計的場景是某些命名空間ns聲明瞭嵌套命名空間std,它也有一個vector(在此示例中)。然後左邊的「附加」::確保全球使用std::vector,而不是本地使用。然而,這不可能是我們的代碼經過一個相當複雜的審查過程的原因,因此任何人都不可能引入一個新的名稱空間std

有沒有其他的情況下,這可能會有所作爲?


[1]我問了幾個資深開發商在隊這個給我解釋,但他們只有爲何正在使用這種「慣例」一個模糊的概念。編寫代碼的最早的開發人員幾年前離開了團隊,在他們離開之前沒有人問過他們。

+3

我想你回答你的問題,我沒有看到有任何其他的原因 – Garf365

+1

@ Garf365是的,那是我能想到的一種情況,只是想檢查這裏的專家是否知道其他事情。有時候這些問題會導致學到一些完全意想不到的事:-) –

回答

2

最顯着的情況下我能想象用std::tolower並遍歷一個容器時是:

​​

正如@MatthieuM在this答案解釋,這是從<locale>tolower功能之間的名稱衝突和<cctype>。由於在您的實現(it's actually unspecified)中,C++標準庫中保存的C標準庫函數位於std全局名稱空間::tolower明確使用<cctype>中的一個。

因此,明確地訪問C標準庫部分的C++標準庫是另一個原因,IMO。

+0

現在是正確的,但如果必須在'std :: tolower'和':: tolower'之間消除歧義(即使不使用.h C標準頭文件),我確實會使用''。 – user2079303

+3

這並不能解釋爲什麼有人會在':: std :: tolower'中使用'::'前綴。 –

相關問題