woe*_*n42 30 c++ bitwise-operators logical-operators visual-studio
当我在 Visual\xc2\xa0Studio\xc2\xa02019 的 C++ 控制台应用程序中使用以下最少代码时,我收到两个完全相反的警告。
\nint main()\n{\n unsigned char op1 = 0x1;\n unsigned char op2 = 0x3;\n unsigned char result1 = op1 | op2;\n unsigned char result2 = op1 || op2;\n}\nRun Code Online (Sandbox Code Playgroud)\n警告unsigned char result1 = op1 | op2;是
\n\nlnt-逻辑按位不匹配 当可能需要逻辑“||”时使用按位“|”。
\n
警告unsigned char result2 = op1 || op2;是
\n\nlnt-逻辑按位不匹配 当可能需要按位“||”时使用逻辑“||”。
\n
这有点好奇。
\n我的目的是使用按位运算符。我如何更改该行unsigned char result1 = op1 | op2;,以便 Visual\xc2\xa0Studio\xc2\xa02019 警告消失?
该警告不是来自编译器;而是来自编译器。输出没有错误。\n可能它来自ReSharper C++ 模块或 Visual\xc2\xa0Studio 代码分析。
\n(当然我可以忽略这个警告,但是在原始代码中有很多警告,因为有很多 unsigned char 按位运算。)
\njab*_*baa 37
lnt-logical-bitwise-mismatch是 Visual Studio linter 规则。它告诉您逻辑运算符只能与布尔值一起使用:
bool op1 = true;
bool op2 = false;
bool result2 = op1 || op2;
Run Code Online (Sandbox Code Playgroud)
位运算符只能与整数一起使用,不能与字符一起使用:
unsigned int op1 = 0x1;
unsigned int op2 = 0x3;
unsigned int result2 = op1 | op2;
Run Code Online (Sandbox Code Playgroud)
请参阅此处了解更多详细信息。
如果您不希望出现此警告,可以在Options -> Text Editor -> C/C++ -> Code Style -> Linter中配置 linter。
我并不是说这些规则有意义。我只是回答为什么会出现波形曲线以及如何避免它。这些规则的有用性是另一个问题。
| 归档时间: |
|
| 查看次数: |
1965 次 |
| 最近记录: |