【发布时间】:2021-03-20 00:14:14
【问题描述】:
我正在尝试使用以下 sn-p 的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,这并不奇怪。
但是,如果我只是将auto 用于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&。然后我有一些问题:
- 我以为
std::ref给了我们std::reference_wrapper而不是&? - 我应该如何解释
&的情况以及为什么它与std::reference_wrapper不同。 - 我还注意到,在
std::reference_wrapper的情况下,std::get<0>(t) = 52;无法编译。 (而在&的情况下确实如此)。错误是“调用类 'std::__1::reference_wrapper' 的私有构造函数”。有人可以更详细地解释一下吗?
谢谢!!
【问题讨论】:
标签: c++ c++11 reference-wrapper