首页 > 后端开发 > C++ > 如何确保 C `constexpr if-else` 链中不会执行 `else` 子句?

如何确保 C `constexpr if-else` 链中不会执行 `else` 子句?

Linda Hamilton
发布: 2024-11-27 11:10:09
原创
718 人浏览过

How Can I Ensure No `else` Clause is Ever Executed in a C   `constexpr if-else` Chain?

防止不满足 Constexpr If-Else 子句

在 C 中,可能需要断言所有 constexpr if 条件满足满足 if-else 语句。如果没有这样的断言,则 else 子句可能会意外地被采用。

考虑以下代码:

if constexpr(condition1){
    ...
} else if constexpr (condition2) {
   ....
} else if constexpr (condition3) {
  ....
} else {
    // I want the else clause never taken. But I heard the code below is not allowed
    static_assert(false);
}
登录后复制

人们可能会认为 else 子句永远不会被采用,因为所有条件都应该是相互的独家的。然而,根据 C 标准,这样的断言是不允许的。

解决方案:模板依赖

为了防止 else 子句被采用,必须将丢弃依赖于模板参数的语句。这可以使用以下代码来实现:

template <class... T> constexpr std::false_type always_false{};

if constexpr(condition1){
    ...
} else if constexpr (condition2) {
   ....
} else if constexpr (condition3) {
  ....
} else {       
    static_assert(always_false<T>);
}
登录后复制

推理

C 标准规定,如果无法生成有效的专门化,则程序是格式错误的。模板或模板内的子语句。通过使废弃语句依赖于模板参数,编译器可以确保在不满足任何条件时无法生成有效的特化,从而有效防止 else 子句被采用。

以上是如何确保 C `constexpr if-else` 链中不会执行 `else` 子句?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板