gpt4 book ai didi

c++11 - "&"和 std::reference_wrapper 之间的区别?

转载 作者:行者123 更新时间:2023-12-03 06:52:25 26 4
gpt4 key购买 nike

我有以下代码

#include <iostream>
#include <vector>
#include <functional>

int main() {
std::vector<double> v(5, 10.3);
std::vector<double>& r = v;
//std::vector<std::reference_wrapper<double>> r(v.begin(),v.end());
for (auto& i : v)
i *= 3;
for (auto i : r)
std::cout << i << " ";
std::cout << std::endl;
}

我正在使用“&”运算符来引用向量“r”,并且在我注释掉的第二行中,我正在使用 C++ 的 std::reference_wrapper。两者都做几乎相同的工作?但我认为即使我们有 '&' 来完成这项工作,也必须有一个制作 std::reference_wrapper 的目的。谁能解释一下吗?

最佳答案

首先,两行

std::vector<double>& r = v;
std::vector<std::reference_wrapper<double>> r(v.begin(),v.end());

不是同一件事。一个是对 double 向量的引用,另一个是对 double “引用”的向量。

其次,std::reference_wrapper 在泛型编程(即:模板)中很有用,其中函数可以通过复制获取其参数,但您仍然希望通过引用传递参数。或者,如果您希望容器具有引用,但无法使用引用,因为它们不可复制或可移动,则 std::reference_wrapper 可以完成这项工作。

本质上,std::reference_wrapper 的作用类似于“&”引用,只不过它是可复制和可重新分配的

关于c++11 - "&"和 std::reference_wrapper 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31270810/

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