C++踩坑记录
1. 数组智能指针
在创建指向数组的智能指针时需要注意传入模板的类型需要加中括号,例如创建八个元素的整数数组指针std::unique_ptr<int[]> ptr = std::make_unique<int[]>(8)
2. 移位操作
移位运算符即按二进制形式把所有数字向左移动相应的位数,高位舍弃,空位补0。因此移位后返回的字符宽度与需要移位的数字字符宽度保持一致
注意移动的位数不得超过变量的字符宽度,不然会导致未定义行为
此时便出现了易错点:移位操作时存在整数提升现象,即小于或等于int的整数类型在运算时会被自动提升为int或unsigned int(当int不够存储原类型数据),这样是不安全的,因此需要在移位前先显示进行类型转换
参考文章C++ 整数提升与移位陷阱
参考文章C++移位运算符详解
3. 判断两个double类型是否相等
由于浮点数储存的精度问题,直接使用相等运算符(==)判断两个double类型的数是否相等可能会导致意外的结果,因此可以设置一个极小的阈值作为两数相差的上限
bool isEqual(double a, double b) {
const double epsilon = 1e-9; // 自定义的阈值
return std::abs(a - b) < epsilon;
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 雯欂の修仙笔记!