现在的位置: 首页 > 综合 > 正文

C++&C编程相关小细节

2017年12月22日 ⁄ 综合 ⁄ 共 395字 ⁄ 字号 评论关闭
文章目录

C++&C编程相关小细节

这里主要汇聚我自己在编程中遇到的一些小细节,容易导致bug的地方。

1  两个数字交换

    a ^= b;
    b ^= a;
    a ^= b;

有些人会这样用,感觉有高达上,不用另外的空间就交换数字。

问题来了:当两个数指向同一个地址的时候,也就是对同一个数异或3次,异或一次就会就会变成0,更何况3次。所以下次要加上判断条件。

    if (a == b)
        return;
    a ^= b;
    b ^= a;
    a ^= a;

2  size_type是一个无符号数

    vector<int>             vec;
    vector<int>::size_type  i;
    for (i = vec.size() - 1; i >= 0; i--)
    {
        /**/
    }

上面一段代码会出现什么bug呢?正常来说,这个没有办法退出循环的。i是一个无符号数,当i = 0之后马上会跳到无符号数最大值,这个值取决于你的机器。

如果你想要修改这段代码,那么只需要把i 的类型改成int类型,或者使用迭代器来解决问题。

【上篇】
【下篇】

抱歉!评论已关闭.