C++ 中的条件运算符 ( ? : ) 可以是编译时吗?

EmV*_*Vee 4 c++ conditional-operator compile-time-constant compile-time c++17

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

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

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

Nic*_*las 6

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

?: 没有那个功能。

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