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同名了,所以出现错误。

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

     

      

  • 相关阅读:
    linux 回收站 路径
    Linux 让进程在后台可靠运行的几种方法
    用marquee和div+js实现首尾相连循环滚动效果
    轻型数据库SQLite结合PHP的开发
    linux系统权限修复——学生误操作!
    2009级 毕业设计 题目
    linux下硬盘uuid查看及修改设置
    创建网站地图
    用上下左右箭头键在textbox中的光标跳转
    SHELL中时间的比较
  • 原文地址:https://www.cnblogs.com/jianghuxiao/p/10498771.html
Copyright © 2011-2022 走看看