gpt4 book ai didi

c++ - std::enable_if_t = 0 的含义是什么

转载 作者:行者123 更新时间:2023-12-02 06:57:09 29 4
gpt4 key购买 nike

我正在阅读std::enable_if ,并注意到以下内容。

template <typename Integer,
std::enable_if_t<std::is_integral<Integer>::value, int> = 0
>
T(Integer) : m_type(int_t) {}

由于 std::enable_if_t 是一种类型,在这种情况下它可以被计算为 intvoid,因此上面的代码可以被计算为

template <typename Integer,
int = 0
>
T(Integer) : m_type(int_t) {}

template <typename Integer,
void = 0
>
T(Integer) : m_type(int_t) {}

我无法理解 int = 0void = 0,有人可以帮我解决这个问题吗?谢谢。

最佳答案

Since std::enable_if_t is a type, and it can be evaluated to int or void for this case, so the above code can be evaluated to ...

这是不正确的。与std::enable_if_t<std::is_integral<Integer>::value, int>唯一类型std::enable_if_t可以是int 。如果std::is_integral<Integer>::value不成立,则根本不存在成员,模板实例化将被丢弃。这意味着它只能解决

template <typename Integer,
int = 0
>
T(Integer) : m_type(int_t) {}

哪里int = 0只是一个未命名的非类型模板参数,其值为 0

我们这样做的原因 = 0这样它就有一个默认值,我们在声明这种类型的对象时不需要向它传递值。如果没有它,您将根本无法使用此构造函数,因为无法指定构造函数的模板参数。即使这不是构造函数,您仍然希望使用默认值,以便用户不需要将不需要的值传递给未命名和未使用的模板参数。

关于c++ - std::enable_if_t = 0 的含义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60528172/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com