文章目录
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类型,或者使用迭代器来解决问题。