std :: reference_wrapper与int&

iu

我正在尝试std::reference_wrapper以下代码段

int a = 42, b = 52;
std::tuple<std::reference_wrapper<int>> t = std::make_tuple(std::ref(a));

std::get<0>(t) = b;
std::cout << "t[0] = " << std::get<0>(t) << ", a = " << a << ", b = " << b
          << std::endl;

输出为t[0] = 52, a = 42, b = 52,这并不奇怪。

但是,如果我只使用autofor t,即

int a = 42, b = 52;
auto t = std::make_tuple(std::ref(a));

std::get<0>(t) = b;
std::cout << "t[0] = " << std::get<0>(t) << ", a = " << a << ", b = " << b
          << std::endl;

然后我得到了 t[0] = 52, a = 52, b = 52

看起来类型变成了int&然后我有一些问题:

  1. 我以为std::ref给我们std::reference_wrapper而不是&
  2. 我应如何解释的情况&以及为何与情况有所不同std::reference_wrapper
  3. 我还注意到,在的情况下std::reference_wrapperstd::get<0>(t) = 52;无法编译。(尽管如此&)。错误是“调用类'std :: __ 1 :: reference_wrapper'的私有构造函数”。有人可以详细解释吗?

谢谢!!

埃雷里卡
  1. 我认为std :: ref给了我们std :: reference_wrapper而不是&?

这不是问题,但您的想法正确。

  1. 我应如何解释&的情况以及为什么它与std :: reference_wrapper不同。

std::reference_wrapper参数传递给时std::make_tuple,生成的元组将具有引用成员而不是引用包装器。

行为上的差异是因为分配引用时,您修改了引用的对象,而分配引用包装器时,而是重新绑定了包装器以引用另一个对象,并且不修改引用的对象。

我还注意到,在std :: reference_wrapper的情况下,std :: get <0>(t)= 52; 不编译。(虽然&确实如此)。错误是“调用类'std :: __ 1 :: reference_wrapper'的私有构造函数”。有人可以详细解释吗?

std::reference_wrapper没有针对引用类型的赋值运算符。它仅具有另一个引用包装程序的赋值运算符。std::reference_wrapper有一个隐式转换的构造函数,它接受一个左值,但没有一个接受右值。

这就是为什么您可以分配b哪个是左值,而不能分配52一个右值。这是一件好事,因为参考包装器无法延长临时对象的寿命。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std :: reference_wrapper的问题

来自分类Dev

std :: reference_wrapper的实现

来自分类Dev

将std :: reference_wrapper <Derived>视为std :: reference_wrapper <Base>的最佳方法

来自分类Dev

在std :: map中使用std :: reference_wrapper

来自分类Dev

使用 std::bind 和 std::reference_wrapper::get

来自分类Dev

std::reference_wrapper<std::any> 上的类型特征

来自分类Dev

MS Visual Studio 2013上的std :: reference_wrapper

来自分类Dev

Eigen :: Ref <>与std :: reference_wrapper <>的优缺点是什么?

来自分类Dev

std :: reference_wrapper解开包装器

来自分类Dev

在特征类型的std :: reference_wrapper中获取原始类型

来自分类Dev

MS Visual Studio 2013上的std :: reference_wrapper

来自分类Dev

如何将std :: vector <std :: reference_wrapper <T>>转换为std :: vector <T>

来自分类Dev

为什么std :: hash不专门用于std :: reference_wrapper?

来自分类Dev

std :: reference_wrapper在std :: bind上不能很好地工作

来自分类Dev

我可以实例化std :: reference_wrapper <T>,其中T是不完整的类型吗?

来自分类Dev

std :: reference_wrapper是否类似于python的传递对象引用?

来自分类Dev

为什么std :: reference_wrapper显式定义副本分配运算符?

来自分类Dev

C ++中std :: reference_wrapper和类型的编译器错误

来自分类Dev

为什么std :: make_tuple将std :: reference_wrapper <X>参数转换为X&?

来自分类Dev

为了实现std :: ref工作的唯一目的,std :: reference_wrapper实现的症结是什么?

来自分类Dev

'max'没有重载匹配'std :: function <const int&(const int&,const int&)>'

来自分类Dev

为什么在调用成员函数时std :: reference_wrapper没有隐式转换为引用?

来自分类Dev

使用`std :: reference_wrapper <T>`作为始终有效的成员变量而不是指针有什么弊端吗?

来自分类Dev

常量reference_wrapper

来自分类Dev

reference_wrapper <string>不能在cout中打印,但是reference_wrapper <int>可以吗?

来自分类Dev

reference_wrapper引用基元

来自分类Dev

C++ 错误:不匹配调用 '(std::list<int>) (int&)'

来自分类Dev

将vector <reference_wrapper <int>>传递给vector <int>吗?

来自分类Dev

为什么std :: is_const <const int&> :: value评估为false?

Related 相关文章

  1. 1

    std :: reference_wrapper的问题

  2. 2

    std :: reference_wrapper的实现

  3. 3

    将std :: reference_wrapper <Derived>视为std :: reference_wrapper <Base>的最佳方法

  4. 4

    在std :: map中使用std :: reference_wrapper

  5. 5

    使用 std::bind 和 std::reference_wrapper::get

  6. 6

    std::reference_wrapper<std::any> 上的类型特征

  7. 7

    MS Visual Studio 2013上的std :: reference_wrapper

  8. 8

    Eigen :: Ref <>与std :: reference_wrapper <>的优缺点是什么?

  9. 9

    std :: reference_wrapper解开包装器

  10. 10

    在特征类型的std :: reference_wrapper中获取原始类型

  11. 11

    MS Visual Studio 2013上的std :: reference_wrapper

  12. 12

    如何将std :: vector <std :: reference_wrapper <T>>转换为std :: vector <T>

  13. 13

    为什么std :: hash不专门用于std :: reference_wrapper?

  14. 14

    std :: reference_wrapper在std :: bind上不能很好地工作

  15. 15

    我可以实例化std :: reference_wrapper <T>,其中T是不完整的类型吗?

  16. 16

    std :: reference_wrapper是否类似于python的传递对象引用?

  17. 17

    为什么std :: reference_wrapper显式定义副本分配运算符?

  18. 18

    C ++中std :: reference_wrapper和类型的编译器错误

  19. 19

    为什么std :: make_tuple将std :: reference_wrapper <X>参数转换为X&?

  20. 20

    为了实现std :: ref工作的唯一目的,std :: reference_wrapper实现的症结是什么?

  21. 21

    'max'没有重载匹配'std :: function <const int&(const int&,const int&)>'

  22. 22

    为什么在调用成员函数时std :: reference_wrapper没有隐式转换为引用?

  23. 23

    使用`std :: reference_wrapper <T>`作为始终有效的成员变量而不是指针有什么弊端吗?

  24. 24

    常量reference_wrapper

  25. 25

    reference_wrapper <string>不能在cout中打印,但是reference_wrapper <int>可以吗?

  26. 26

    reference_wrapper引用基元

  27. 27

    C++ 错误:不匹配调用 '(std::list<int>) (int&)'

  28. 28

    将vector <reference_wrapper <int>>传递给vector <int>吗?

  29. 29

    为什么std :: is_const <const int&> :: value评估为false?

热门标签

归档