可以将三元(条件)运算符用作C ++ 17中引入的constexpr if()
的类吗?
我想为模板中的成员变量初始化添加一些条件。以下表达式在编译时或运行时解析吗?如果是这样,是否还有其他运算符在编译时解析,从而可以避免模板特化?
template<int a>
struct hello {
const static int n = (a != 0) ? 10 : 20;
}
取决于您的意思是“类似于constexpr if()
”。if constexpr
需要条件是一个常量表达式。它还在模板代码中具有某些特权,可以丢弃未使用的分支。
[?:
没有该功能。
但是?:
可以很好地出现在常数表达式中,而且总是可以。它不会使表达式不恒定。
是的,它绝对可以并且实际上在引入if constexpr
之前就已经可以在C ++ 11中使用,并且甚至在C ++ 11之前也可以在常量表达式中使用,例如您要提问的那个。