记一次秀代码的惩罚

2018-03-10  本文已影响69人  90d81be3ec65

在练习写排序算法时,写了个交换数据函数,本来简简单单一个函数,按照如下写法简单可行:

void swap(int &a, int &b) {
    int tmp = a;
    a = b;
    b = tmp;
}

可我脑子一热,想到可以不开辟另外的空间,进行交换操作,便有了下面代码:

void swap(int &a, int &b) {
    a = a + b;
    b = a - b;
    a = a - b;
}

乍一看好像也没什么毛病,但实际上有个严重的细节错误,先看如下代码输出:

#include <iostream>
using namespace std;

void swap(int &a, int &b) {
    a = a + b;
    b = a - b;
    a = a - b;
}

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

    swap(a, b);
    cout << a << " "<< b << endl; // 输出 3,3,没毛病

    swap(a, a);
    cout << a << endl; // 输出0,这tm!!!!!!!!!!!!!

    return 0;
}

看到输出就明白自己犯了这么傻的错误,自己和自己交换的时候把自己变成了0,相同数据交换虽然也能得到正确结果,但也没必要,交换改进后代码如下:

void swap(int &a, int &b) {
    if (a == b) return;
    a = a + b;
    b = a - b;
    a = a - b;
}

所以,以后别乱秀,小心秀死自己O(∩_∩)O~~

上一篇 下一篇

猜你喜欢

热点阅读