在 vector::at 返回引用后进行更改
make change after vector::at returns a reference
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> nums {0,1,2};
vector<int> copy {0};
copy.at(0) = nums.at(0); // nums.at(0) returns a reference
nums.at(0) = -1; // why this line doesn't change copy[0]
std::cout << copy.at(0); // print 0
}
嗨,正如代码所示,看起来更改 nums.at(0( 不会影响 copy.at(0(。copy.at(0) = nums.at(0);
是否将复制赋值运算符称为副本? 对我来说,这一行实际上做一个副本是没有意义的,因为copy.at(0)
也返回了一个引用。
引用在初始化时绑定。之后,引用引用绑定对象,不能引用其他内容。
也许最好通过一个例子来理解这一点:
int x = 6;
int& x_ref = x; // bind x_ref to x
int y = 12;
x_ref = y; // assign the value of y to x
在您的代码中,copy.at(0)
确实返回了一个引用,但是您不能将该引用重新绑定到其他内容。相反copy.at(0) = something;
会将something
分配给copy.at(0)
引用的内容。
我完全同意上面的评论,你误解了。 此外,引用必须在声明时初始化, 这可以说明您的情况。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> nums {0,1,2};
int& copy = nums.at(0);
nums.at(0) = -1;
std::cout <<"copy is"<< copy; // print -1
}
请注意:这是自找麻烦,一旦向量重新分配或删除元素,引用就会悬空。
另请参阅C++中的引用概念
在线演示
相关文章:
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 为什么通过 vector<reference_wrapper> 的元素删除引用的值<T>不会使向量无效?
- 在 C++20 之前,在带有常量或引用字段的"A"上调用 'std::vector<A>
- PyBind11:返回对 std::vector of std::unique_ptr 的常量引用
- std::vector 是否有用于引用的复制构造函数?
- 通过引用传递时访问std::vector的元素
- 从引用的Vector获取SEGFAULT
- 将双指针作为参数传递给需要引用 std::vector <double>的函数
- 在 vector::at 返回引用后进行更改
- std::vector 的常量引用
- 无法使用带有常量引用的 lambda 对 std::vector 进行排序
- 将 std::vector 收缩以适应对向量本身的引用无效
- 处理受向 std::vector 添加元素影响的引用
- 尝试将 std::vector<std::p air<T, U>> 转换为其左值引用时收到 VS 编译器警告 C4239
- 将本地 std::vector 分配给C++中的引用
- std::vector::p ush_back 参数通过引用
- 有没有更好的方法来删除对存储在 vector 中的元素的原始指针引用
- 修改向量后引用 vector.back() 的奇怪行为
- 调用带有引用vector元素参数的c++函数
- 在向vector添加更多元素之前引用vector元素