繁体   English   中英

如何通过引用将更改从向量提交到 C++ 中的该向量?

[英]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");

上面的语句创建了一个名为strstd::string类型的变量,并具有调用表达式a.save("abc")返回的std::string副本(通过引用返回)。 也就是说, strstd::vector数据成员vec中元素的副本。

要获得所需的 output,请将语句更改为如下所示:

std::string& str = a.save("abc");

现在,在上面的语句中, str是调用表达式a.save("abc")返回(通过引用)的std::string的别名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM