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

今天用了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;就搞定,我觉得蛮简洁的就一直用了,没想到带来那么多的问题,以前在友元函数上还碰到莫名的错误呢。     其实还有两个简单的解决方案,那就是把自己定义的函数改成其他的名字,或者直接用微软提供的函数。相信微软提供的效率绝对不会比我们写的低~     好了,就写到这了。希望大家养成良好的编程习惯,^-^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值