zoukankan      html  css  js  c++  java
  • swap 与Swap的故事

      这是我的第一篇博客,也是有点小激动,记录下刚碰到的一个小问题。

      我在写函数模板swap()想练习下template<class T>的使用;我的代码如下:   

    #include <iostream>
    using namespace std;
    template<class T>
    void swap(T &a,T &b)
    {
    cout << " 交换前:" << endl;
    cout << a << " " << b << endl;


    T c ;
    c = a;
    a = b;
    b = c;


    cout << " 交换后:" << endl;
    cout << a << " " << b << endl;
    }


    int main()
    {
    int a = 3, b = 7;
    swap(a,b);

    double da = 3.0, db = 7.0;
    swap(da,db);

    }

      

      编译报错

      call of overloaded 'swap(int&, int&)' is ambiguous swap(a,b);

      我检查了好几遍都没什么逻辑错误 也不知道有什么语法错误 真的是头大了; 

      在网上搜到一个和我几乎一模一样的代码  

    #include <iostream>
    using namespace std;
    template<class T>
    void Swap(T & x, T & y)
    {
    T tmp = x;
    x = y;
    y = tmp;
    }
    int main()
    {
    int n = 1, m = 2;
    Swap(n, m); //编译器自动生成 void Swap (int &, int &)函数
    cout << n << " " << m << endl;
    double f = 1.2, g = 2.3;
    Swap(f, g); //编译器自动生成 void Swap (double &, double &)函数
    return 0;
    }

    奇怪了,为什么人家的就没啥错误呢,就运行得很好呢。

    我仔细比较了到底有啥区别,难道就只是别人的是Swap, 我的是swap吗? 就抱着试一试的态度,把我的小写s,换成了大写S,编译,惊呆了,居然编译通过了。

    后来查了下才知道是和标准库的std::swap同名了,所以出现错误。

    不禁让人感叹,再简单的程序,没有把它变成代码输出来,就感受不到它的真实的情况,在编程的时候会遇到各种各样出乎自己预料的问题,程序员都要动手把代码敲出来吧。

     

      

  • 相关阅读:
    asp.net,cookie,写cookie,取cookie(转载)
    Powerdesign使用小技巧(转载)
    注册asp.net 4.0 到iis
    jQuery的弹出窗口插件colorbox
    sql自动增长标识(转载)
    SVN服务器更改ip地址客户端怎么设置(转载)
    IIS6.0应用程序池回收(转载)
    [delphi]修改indy源码后重新编译
    IdHttp 资料
    c/s程序版本自动升级的问题,如何判断client端版本号是否最新,然后从指定ftp服务器down
  • 原文地址:https://www.cnblogs.com/jianghuxiao/p/10498771.html
Copyright © 2011-2022 走看看