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

问题描述 投票:4回答:2

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

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

template<int a>
struct hello {
    const static int n = (a != 0) ? 10 : 20;
}
c++ c++17 conditional-operator compile-time compile-time-constant
2个回答
6
投票

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

[?:没有该功能。

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


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.