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
要求条件是常量表达式。它在模板代码中也有一定的权限,可以丢弃没有走的分支。
?:
没有那个功能。
但是 ?:
可以很好地出现在常量表达式中,而且总是可以。它不会使表达式非常量。
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
要求条件是常量表达式。它在模板代码中也有一定的权限,可以丢弃没有走的分支。
?:
没有那个功能。
但是 ?:
可以很好地出现在常量表达式中,而且总是可以。它不会使表达式非常量。