Arp*_*ana 2 reference wrapper c++11
我有以下代码
#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;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用'&'运算符引用向量'r',在第二行中我注释了我使用的是C++的std :: reference_wrapper.两者都做同样的工作?但我认为即使我们有'&'来完成这项工作,也必须有一个制作std :: reference_wrapper的目的.有人可以解释一下吗?
首先是两条线
std::vector<double>& r = v;
std::vector<std::reference_wrapper<double>> r(v.begin(),v.end());
Run Code Online (Sandbox Code Playgroud)
不要吝啬同样的事情.一个是对双精度矢量的引用,另一个是对双精度的"引用"的矢量.
其次,std :: reference_wrapper在泛型编程(即:模板)中很有用,其中函数可以通过复制获取其参数,但是您仍然希望通过引用传递参数.或者,如果您希望容器具有引用,但由于它们不可复制或可移动而无法使用引用,那么std :: reference_wrapper可以完成这项工作.
从本质上讲,std :: reference_wrapper就像一个"&"引用,除了它是可复制的和可重新分配的
| 归档时间: |
|
| 查看次数: |
954 次 |
| 最近记录: |