在 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
及其姊妹的实现)您将拥有实际的按位运算。然后你可以把这几行读两三遍,看看你是不是搞砸了。更好的是,您可以对该部分进行单元测试。
关于c++ - 防止滥用逻辑运算符而不是按位运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/980438/