如何解决为什么编译“ if constexpr”的假分支?
为什么此代码在编译时出现错误?我对“ 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
总是格式错误(由于缺少;
)。
因此,编译器在给出编译错误时是正确的。从技术上讲,如果所有实例的废弃分支格式都不正确,则不需要要求给出编译器错误,但是代码仍然是错误的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。