考虑到正在检查的条件变量已标记为
constexpr
,以下代码片段在功能上是否等效?
此外,这是
if constexpr
的正确用法还是它在模板化上下文中的预期应用。
constexpr bool kOn = false;
// Snippet 1
if (kOn) { return true; }
// Snippet 2
if constexpr (kOn) { return true; }
不,两个
if
不等价。
第一个在运行时评估,其两个分支中的代码必须在编译时格式良好。
第二个是在编译时评估的,其未使用分支中的代码可能格式错误,因为其死代码会被编译器删除。
if constexpr
不依赖于模板。