我试图实现一个DLL,并提供一些接口给我无法控制的遗留VS2017 C14项目。我想在头文件中使用if constexpr表达式,发现编译器会抱怨C4984。不知道“可移植”是什么意思:如果您需要C11或C++14兼容性,则此表达式不可移植。默认情况下,C4984作为错误发出,但它是可以隐藏的。我在我的if constexpr表达式之前添加了#pragma warning(disable : 4984),发现遗留项目可以很好地编译和运行,那么我需要担心“可移植”的事情吗?
if constexpr
#pragma warning(disable : 4984)
ars1skjm1#
if constexpr是C17的一个特性。它不能在C14中使用。如果编译器允许它在C++14模式下使用(带有警告),那么这是一个扩展。其他编译器,特别是旧的编译器,不会这样做。#pragma warning(disable : 4984)当然不是可移植的,它是MSVC特有的。
1条答案
按热度按时间ars1skjm1#
if constexpr
是C17的一个特性。它不能在C14中使用。如果编译器允许它在C++14模式下使用(带有警告),那么这是一个扩展。其他编译器,特别是旧的编译器,不会这样做。#pragma warning(disable : 4984)
当然不是可移植的,它是MSVC特有的。