为什么这段代码在编译时会出错?我的知识(还有this) of "if constexpr
” 说else
块不应该被编译。
if constexpr (true) {
int a = 10;
} else {
int b = 10
}
错误是:
error: expected ‘,’ or ‘;’ before ‘}’ token
使用的编译器:g++ 版本 7.5.0
编译时我使用了-std=c++17
flag.
P.S.缺少的“;”是故意的,只是为了检查是否else
是否正在编译。
这里有两个独立但相关的问题。
首先,if constexpr
只会有条件地编译模板内的分支。在模板之外,所有分支都将被编译并且必须格式良好。
其次,即使在模板中,废弃的分支if constexpr
不可能对于所有可能的实例都是格式错误的。您的代码中并非如此,因为:
int b = 10
总是格式错误(由于缺少;
).
所以编译器给出编译错误是正确的。从技术上讲,如果丢弃的分支对于所有实例化都是格式错误的,则编译器不会required给出编译器错误,但代码仍然错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)