我正在尝试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
for 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' 的私有构造函数”。有人可以更详细地解释一下吗?
谢谢!!