我可以让 MSVC 对“C4127:条件表达式是常量”不那么严格吗

问题描述 投票:0回答:1

我正在使用 MSVC 16 2019,并打开了许多警告,包括 C4127:条件表达式是常量。但是,我的代码如下所示:

template <bool B>
void foo(int x) {
    if (B && x == 0) { do_stuff(); }
    do_other_stuff();
}

...当 B 为 false 时会触发警告。

我想一般保留这个错误,但我不希望它在条件表达式的常量性仅由于模板实例化时无缘无故地发出警告。

注意:这个问题是相关的,但是 - 代码不会(显着)改变,所以这不是我要问的。 C++17 中也没有。

c++ visual-studio-2019 compiler-warnings c4127
1个回答
0
投票

您可以将函数重新格式化为

template <bool B>
void foo(int x) {
    bool b = B;
    if (b && x == 0) { do_stuff(); }
    do_other_stuff();
}

现在

b
不是常量表达式,因此警告不应再适用。

© www.soinside.com 2019 - 2024. All rights reserved.