问题描述
为什么此代码在编译时出现错误?我对“ if constexpr
”的知识(还有this)说,else
块不应该被编译。
if constexpr (true) {
int a = 10;
} else {
int b = 10
}
错误是:
error: expected ‘,’ or ‘;’ before ‘}’ token
使用的编译器: g ++ 7.5.0版
编译时,我使用了 -std=c++17
标志。
PS 。缺少的“;”只是为了检查else
是否正在编译。
解决方法
这里有2个独立但相关的问题。
首先,if constexpr
将仅在模板中有条件地编译分支。在模板之外,所有分支都将被编译并且必须格式正确。
第二,即使在模板中,对于所有可能的实例化,if constexpr
的废弃分支也不会格式错误。在您的代码中情况并非如此,因为:
int b = 10
总是格式错误(由于缺少;
)。
因此,编译器在给出编译错误时是正确的。从技术上讲,如果所有实例的废弃分支格式都不正确,则不需要要求给出编译器错误,但是代码仍然是错误的。