gpt4 book ai didi

c++ - std::is_convertible_v 何时为 false?

转载 作者:行者123 更新时间:2023-12-01 22:18:04 31 4
gpt4 key购买 nike

我正在阅读 std::pair 的构造函数规则(如 cppreference 上所述)当我遇到此裁决时:

This constructor is explicit if and only if std::is_convertible_v<const first_type&, first_type> is false or std::is_convertible_v<const second_type&, second_type> is false.

std::is_convertible_v<From, To>true如果From可以隐式转换为 To ,和false如果情况并非如此。

但是什么情况下会出现std::is_convertible_v<const T &, T>这样的情况?是false ?我想了一会儿,但实际上我暂时想不出任何办法。在我看来,对 T 类型的 const 值的引用总是可以转换为 T 类型的值.

最佳答案

std::is_convertible_v检查隐式转换。 std::is_convertible_v<const T &, T>返回true如果 T 存在隐式复制构造函数.

struct S {
explicit S(const S &) = default;
};

S有一个显式的复制构造函数,所以 std::is_copy_constructible_v<S>true但是std::is_convertible_v<const S &, S>falsestd::pair 的复制构造函数应该是explicit匹配 first_type 的复制构造函数所以 std::pair 的复制构造函数是有意义的是 explicitstd::is_convertible_v<const first_type &, first_type>false .

关于c++ - std::is_convertible_v<const type &, type> 何时为 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58722313/

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