Kis*_*kla 0 c++ constexpr c++17 if-constexpr
为什么这段代码在编译时出错?我对“ ”的了解(以及这个)if constexpr表明该else块不应该被编译。
if constexpr (true) {
int a = 10;
} else {
int b = 10
}
Run Code Online (Sandbox Code Playgroud)
错误是:
error: expected ‘,’ or ‘;’ before ‘}’ token
Run Code Online (Sandbox Code Playgroud)
使用的编译器:g++ version 7.5.0
编译时我使用了-std=c++17标志。
PS缺少的';' 是故意的,只是为了检查是否else正在编译。
这里有 2 个独立但相关的问题。
首先,if constexpr只会有条件地编译模板中的分支。在模板之外,所有分支都将被编译并且必须格式良好。
其次,即使在模板中,if constexpr对于所有可能的实例化,被丢弃的分支也不可能是格式错误的。这不是您的代码的情况,因为:
int b = 10
Run Code Online (Sandbox Code Playgroud)
总是格式错误的(由于缺少;)。
所以编译器给出编译错误是正确的。从技术上讲,如果丢弃的分支对于所有实例都是错误的,那么编译器不需要给出编译器错误,但代码仍然是错误的。