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

Can the conditional operator ( ? : ) in C++ be compile time?

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

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

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

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

这取决于你所说的 "analogous to constexpr if()" 是什么意思。 if constexpr要求条件是常量表达式。它在模板代码中也有一定的权限,可以丢弃没有走的分支。

?: 没有那个功能。

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