gpt4 book ai didi

c++ - reference_wrapper 和隐式转换

转载 作者:太空宇宙 更新时间:2023-11-04 14:07:13 26 4
gpt4 key购买 nike

考虑以下代码:

int v = 12;
std::reference_wrapper<int> x(v);
std::reference_wrapper<const int> y(x); // (1) This works
std::reference_wrapper<const int> z = x; // (2) This fails

如果我理解正确,(1) 有效,因为它只需要一个用户转换,(2) 失败,因为它在转换序列中涉及两个用户转换:

std::reference_wrapper<int>::operator int& and
std::reference_wrapper<const int>::(const int&)

因此,std::reference_wrapper<int>不能隐式转换std::reference_wrapper<const int>这破坏了我使用 std::is_convertible 的一些代码特质。

这种设计是否涉及不存在通用复制构造函数的任何原因:

template <typename Y>
reference_wrapper<T>::reference_wrapper(const reference_wrapper<Y>&)

(就像在 std::shared_ptr 中一样)允许这样的隐式转换?

最佳答案

std::reference_wrapper 与其基础类型之间没有隐式自动转换(因为它可能不安全且容易混淆)。

正确的语法应该是:

std::reference_wrapper<const int> z = x.get();

关于c++ - reference_wrapper 和隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16395919/

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