尽量不要使用using namespace std;VC++2005使用有感

Posted on 2007-11-06 20:28  Samson小天  阅读(10487)  评论(7编辑  收藏  举报

今天用了VISUAL C++写了个小程序(VS2005),很简单很简单的,但是就是编译不通过
出现一个奇怪的问题:错误 1 error C2668: “max”: 对重载函数的调用不明确

最初代码如下

#include <iostream> 
using namespace std; 

template 
<typename T> 
T max (T a,T b) 

return ((a>b)?a:b); 
}
 
void main() 

double x,y; 
cin
>>x>>y; 
cout
<<"Max number is "<<(max(x,y))<<endl; 
cin
>>x; 
}
 

    我将这段代码放到VC++ 6.0下竟然通过了,程序运行也正常。这让我百思不得其解。后来终于弄明白了!
    其实在std命名空间下还有一个MAX函数,而且实现的功能也是一样的……我昏。利用转到定义功能可以看到微软是怎么写MAX函数的。这里为了不被鄙视就不贴微软的代码了。
    明白了为什么出现这个错误我们就改写代码如下:
#include <iostream> 
using std::cin;
using std::cout;
using std::endl;

template 
<typename T> 
T max (T a,T b) 

return ((a>b)?a:b); 
}
 
int main() 

double x,y; 
cin
>>x>>y; 
cout
<<"Max number is "<<(max(x,y))<<endl; 
cin
>>x; 
}
 

    这是我比较推荐的做法,因为C++ PRIMER, EFFECTIVE C++上都是用这种方式的,但是谭浩强的书上都是一句using namespace std;就搞定,我觉得蛮简洁的就一直用了,没想到带来那么多的问题,以前在友元函数上还碰到莫名的错误呢。
    其实还有两个简单的解决方案,那就是把自己定义的函数改成其他的名字,或者直接用微软提供的函数。相信微软提供的效率绝对不会比我们写的低~
    好了,就写到这了。希望大家养成良好的编程习惯,^-^

Copyright © 2024 Samson小天
Powered by .NET 8.0 on Kubernetes