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

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

     

      

  • 相关阅读:
    C#操纵Excel,此工作薄包含嵌入对象,Office 2007的设定方法
    将本程序添加到自启动项
    .net表达式计算器(中缀表达式转后缀表达式,支持20多个数学函数,支持函数嵌套)
    Entity Framework 调用返回标量值的存储过程
    Dev控件 galleryControl
    Dev控件treeList
    Linux下USB驱动开发相关链接
    Linux下串口编程相关链接
    Linux常用命令操作说明(链接)
    Perl的主要应用领域
  • 原文地址:https://www.cnblogs.com/jianghuxiao/p/10498771.html
Copyright © 2011-2022 走看看