zoukankan      html  css  js  c++  java
  • 尽量不要使用using namespace std;VC++2005使用有感

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

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

  • 相关阅读:
    AtCoder Regular Contest 066 F Contest with Drinks Hard
    AtCoder Grand Contest 002 D
    AtCoder Regular Contest 076 F
    AtCoder Grand Contest 004 C
    AtCoder Regular Contest 067 F
    转载:Unity3D游戏对象消失enabled、Destroy与active的区别
    Unity3d-AngryBots实例解读
    本类对象的引用作为参数,可以直接访问其私有成员
    构建完全二叉树、控制台打印二叉树
    转载:C++类内存分布
  • 原文地址:https://www.cnblogs.com/lihaozy/p/2491532.html
Copyright © 2011-2022 走看看