34

一个人如何使用概念if constexpr

给定下面的例子,如果满足和 0 的要求,if constexpr返回 1会给出什么?Tintegral

template<typename T>
concept integral = std::is_integral_v<T>;

struct X{};

template<typename T>
constexpr auto a () {
    if constexpr (/* T is integral */) {
        return 1;
    } 
    else {
        return 0;
    }
}

int main () {
    return a<X>();
}
4

2 回答 2

28

概念被命名为模板参数上的布尔谓词,在编译时进行评估。

constexprif语句中,条件的值必须是上下文转换的类型常量表达式bool

所以在这种情况下,用法很简单:

if constexpr ( integral<T> )
于 2019-02-07T13:10:48.630 回答
18

这样做就足够了:

if constexpr ( integral<T> )

因为integral<T>已经可以测试为bool

于 2019-02-07T12:36:10.800 回答