std :: is_convertible_v 什么时候为假?

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

当我遇到此裁定时,我正在阅读std::pair的构造函数规则(如cppreference所记录:

[且仅当std::is_convertible_v<const first_type&, first_type>falsestd::is_convertible_v<const second_type&, second_type>false时,此构造函数才是显式的。

如果std::is_convertible_v<From, To>可隐式转换为true,则[FromTo,如果不是,则为false

但是在std::is_convertible_v<const T &, T>这样的情况下,false是什么情况?我已经考虑了一段时间了,实际上我没有想到任何附属的东西。在我看来,对T类型的const值的引用将始终可转换为T类型的值。

c++ typetraits std-pair
1个回答
3
投票

std::is_convertible_v检查隐式转换。如果存在std::is_convertible_v<const T &, T>implicit复制构造函数,则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::pairexplicit时,std::is_convertible_v<const first_type &, first_type>的副本构造函数为false是有意义的。

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