今天我收到了一些發送給我的代碼,它使用std :: string中的std :: transform使它全部爲小寫。寄件人寫在Visual Studio 2010中編譯的代碼:Visual Studio:全局命名空間優先於本地
using namespace std;
string test = "TEST";
transform(test.begin(), test.end(), test.begin(), tolower);
Wheras我編譯它在OSX與海灣合作委員會和/或鏘,並得到了編譯錯誤,因爲它涉及到命名空間的衝突。
確實有一堆解決全局命名空間與本地(:: tolower vs std :: tolower)的回答問題,但這是關於這段代碼實際上在VS上工作的事實。
問題我想答案:
- 爲什麼Visual Studio中編譯這個?
- 它如何默認(?)到全局命名空間::何時std ::應該取 優先?
- 繼承人ideone片段(有錯誤):http://ideone.com/qvUAMw
- 繼承人ideone片段(的作品):http://ideone.com/lk0H5d
注:進出口使用GCC 4.2和鏘(425.0.24 LLVM 3.2svn)在OSx Mountain Lion上
雖然這個答案的部分,它還是有趣理解爲什麼VS需要:: tolower之前(或者我應該說,而不是)std :: tolower。可能會有一些參數查找,[鏈接](http://msdn.microsoft.com/en-us/library/60bx1ys7(v = vs.90).aspx)發生。但我不知道,因爲我沒有安裝VS實例。請注意,GCC也具有依賴於參數的查找,但在這種情況下表現出不同的行爲。 – hugolm84 2013-02-22 13:10:30