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

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

     

      

  • 相关阅读:
    HDU_1016——素环问题DFS
    什么是REST?以及RESTful的实现
    WebApi系列~基于RESTful标准的Web Api
    理解RESTful架构
    国内技术管理人员批阅google的“春运交通图”项目
    项目质量量化考核建议
    设计模式在交易系统中的应用
    修改Chrome临时文件位置
    百度员工离职总结:如何做个好员工?
    Firebird数据库系统的开发团队
  • 原文地址:https://www.cnblogs.com/jianghuxiao/p/10498771.html
Copyright © 2020-2023  润新知