编译器警告 C4984
“if constexpr”是一种 C++17 语言扩展
备注
编译器在使用默认 C++14 标准编译的代码中发现了 if constexpr
表达式。 从 C++17 标准起,开始指定此表达式。 如果需要 C++11 或 C++14 兼容性,则此表达式不可移植。
默认情况下,C4984 作为错误发出,但可以将其禁止。 要通过将代码编译为 C++17 来启用此表达式,请使用 /std:c++17
模式或更高版本。 若要将针对 C++14 编译的代码中的 if constexpr
表达式用作 Microsoft 扩展,可以禁止、禁用或更改错误消息的警告级别。 可以使用 /wd4984 禁用 C4984,或使用 /wN4984 将其作为 N 级警告而不是错误启用。 或者,将 #pragma warning(suppress:4984)
添加到在源文件中导致警告的行之前。
从 Visual Studio 2017 版本 15.3 开始,此警告可用。 有关如何禁用特定编译器版本或更高版本中引入的警告的信息,请参阅由编译器版本引发的编译器警告。
示例
此示例生成 C4984,并演示修复方法:
// C4984.cpp
// compile with: cl /EHsc C4984.cpp
#include <iostream>
int main()
{
constexpr bool compile_time = true;
// Uncomment the following line or use /std:c++17 to fix
// #pragma warning(suppress:4984)
if constexpr (compile_time)
{
std::cout << "compile_time is true";
}
else
{
std::cout << "compile_time is false";
}
}