我正在使用 MSVC 16 2019,并打开了许多警告,包括 C4127:条件表达式是常量。但是,我的代码如下所示:
template <bool B>
void foo(int x) {
if (B && x == 0) { do_stuff(); }
do_other_stuff();
}
...当 B 为 false 时会触发警告。
我想一般保留此错误,但我不希望它在条件表达式的常量性仅由于模板实例化时无缘无故地发出警告。
注意:这个问题是相关的,但是 - 代码不会(显着)改变,所以这不是我要问的。C++17 中也没有。
您可以将函数重新格式化为
and now
b
不是常量表达式,因此警告不应再适用。您可以使用 #pragma 指令暂时禁用该代码块的警告,正如 Mark Ransom 所建议的那样。
请参阅: https://learn.microsoft.com/en-us/cpp/preprocessor/warning ?view=msvc-170