[英]How to commit changes through reference from vector into that vector in C++?
有了这个:
#include <iostream>
#include <vector>
class A{
std::vector<std::string> vec;
public:
std::string &save(std::string const&s){
vec.push_back(s);
return vec.back();
}
std::vector<std::string> const& getVec() const {
return vec;
}
};
int main(){
A a;
std::string str = a.save("abc");
str[str.length() - 1] = 'd';
std::cout << str << '\n';
std::cout << a.getVec()[0] << std::endl;
}
output:
abd
abc
期待:
abd
abd
我希望因为A::save
返回对向量最后一个元素的引用,所以对该元素所做的更改也将提交到向量中(因为该引用)。 但它显然没有。 为什么?
当你写道:
std::string str = a.save("abc");
上面的语句创建了一个名为str
的std::string
类型的变量,并具有调用表达式a.save("abc")
返回的std::string
的副本(通过引用返回)。 也就是说, str
是std::vector
数据成员vec
中元素的副本。
要获得所需的 output,请将语句更改为如下所示:
std::string& str = a.save("abc");
现在,在上面的语句中, str
是调用表达式a.save("abc")
返回(通过引用)的std::string
的别名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.