我正在尝试在 C++ 中使用引用包装器,因为我希望能够直接更改对象的值,但它们的值都是错误的。这是一个演示此问题的示例:
#include <vector>
#include <functional>
#include <iostream>
using namespace std;
int main() {
vector<int> v1 = {1, 2, 3};
for (int i : v1) {
cout << i << " ";
}
cout << endl;
vector<reference_wrapper<int>> v2;
for (int i : v1) {
v2.push_back(i);
}
for (int i : v2) {
cout << i << " ";
}
}
它打印
1 2 3
3 3 3
我不确定为什么引用包装向量v2
没有复制引用的值v1
...
编辑:这是另一个神秘地不起作用的例子。我认为这一篇中没有任何悬而未决的参考资料。
#include <vector>
#include <functional>
#include <iostream>
using namespace std;
int main() {
vector<int> v1;
vector<reference_wrapper<int>> v2;
for (int i = 0; i < 3; i++) {
v1.push_back(i);
v2.push_back(v1[i]);
}
for (int i : v2) {
cout << i << " ";
}
}
它打印9596312 1 2
,而我希望它打印0 1 2
......