今天我收到了一些发送给我的代码,它使用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