c++ - 防止滥用逻辑运算符而不是按位运算符

标签 c++ bit-manipulation operators

在 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/

相关文章:

c - 使用 n 位数字生成数字(类似于生成 n 位值的子集)

floating-point - 遍历所有可能的浮点值

c++ - OpenCV/无法打开 AVI 文件

c++ - 在类中使用 QtConcurrent::MappedReduce

c++ - 将自定义样式表应用于 QTextDocument

optimization - n 组位的高效随机排列

c++ - 将 stdout 和 stderr 重定向到 C++ 中的文件

php - AND、OR 输出错误结果

f# - 无法让绑定(bind)运算符与可区分联合一起使用

perl - 如何在 Perl 中检查非空文件