#if 与 if constexpr

#if Vs if constexpr

编译时配置(例如debug/release)、预处理器指令if constexpr

哪个更合适?
#define DBG

#if DBG
// some code
#endif

// --------------------------------- or

inline constexpr bool DEBUG { true };

if constexpr ( DEBUG )
{
// some code
}

为此,您通常仍需要 #if#if 可以做一些事情,比如改变你包含的头文件,改变定义的函数和类型,以及改变其他预处理器指令的定义。 if constexpr 做不到这些。

请注意,如果 if constexpr 而不是 模板的一部分,那么 if 的其他部分(例如 elses) 仍在编译并检查有效性。

来自cppreference

If a constexpr if statement appears inside a templated entity, and if condition is not value-dependent after instantiation, the discarded statement is not instantiated when the enclosing template is instantiated .

Outside a template, a discarded statement is fully checked. if constexpr is not a substitute for the #if preprocessing directive: