在C++中,可以在需要双向运算符的地方使用逻辑运算符:

int unmasked = getUnmasked(); //some wide value
int masked = unmasked & 0xFF; // izolate lowest 8 bits

第二条语句很容易被误输入:
int masked = unmasked && 0xFF; //&& used instead of &

这将导致错误的行为-当masked的范围是从0到255时,它现在将为0或1。C++永远不会抱怨。

设计代码是否可以在编译器级别检测到此类错误?

最佳答案

在您的编码标准中,禁止在代码的任意部分直接使用任何按位运算。强制改为调用函数

所以代替:

int masked = unmasked & 0xFF; // izolate lowest 8 bits

你写:
int masked = GetLowestByte(unmasked);

另外,您将获得一个代码库,该代码库中没有数十处容易出错的按位操作。

只有在一个地方(GetLowestByte及其姐妹的实现),您才可以进行实际的按位操作。然后,您可以阅读这些行两到三遍,看看是否自爆。更好的是,您可以对该部分进行单元测试。

09-13 08:03