【问题标题】:Can the conditional operator ( ? : ) in C++ be compile time?C ++中的条件运算符( ? : )可以编译吗?
【发布时间】:2020-05-15 06:25:39
【问题描述】:

三元(条件)运算符可以用作类似于 C++17 中引入的constexpr if() 吗?

我想为模板中的成员变量初始化添加一些条件。以下表达式会在编译时或运行时解析吗?如果是这样,是否有任何其他运算符在编译时解析,从而可以避免模板特化?

template<int a>
struct hello {
    constexpr static int n = (a != 0) ? 10 : 20;
}

【问题讨论】:

  • "这样可以避免模板特化" 为什么要避免它?
  • @Acorn 赞成简洁
  • 您可能应该使用constexpr 而不是const,尤其是在编译时评估对您很重要的情况下(尽管在这种情况下它很可能不会产生影响。)
  • 如果你只传入编译时常量表达式,任何体面的编译器都应该能够在编译时计算它。
  • 尝试预处理器#if。

标签: c++ c++17 conditional-operator compile-time compile-time-constant


【解决方案1】:

是的,它绝对可以而且事实上在引入 if constexpr 之前它已经可以在 C++11 中使用,并且甚至在 C++11 之前 用于常量表达式,例如一个在你的问题中。

【讨论】:

    【解决方案2】:

    这取决于您所说的“类似于constexpr if()”是什么意思。 if constexpr 要求条件是一个常量表达式。它在模板代码中也有一定的权限,可以丢弃未采用的分支。

    ?: 没有该功能。

    但是?: 可以很好地出现在常量表达式中,而且总是可以。它不会使表达式成为非常量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-25
      • 2022-07-09
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 2012-02-16
      • 2020-11-19
      相关资源
      最近更新 更多