c++ - 变量内部变量的问题一旦更改就会恢复

标签 c++ c++11 reference return-type member-functions

我遇到的问题是,一旦我更改了变量,稍后引用时它似乎就没有变化 在代码中。

class foo
{
private:
    string name;
public:
    foo(string _name)
    :name(_name)
    {}
    void info()
    { cout<<name; }
    void newName(string new_name)
    { name = new_name; }
};

class bar
{
private:
    string _name;
    vector<foo> _content;
public:
    foo at(int i)
    { return _content.at(i); }
    void push_back(foo newFoo)
    { _content.push_back(newFoo); }
};

int main()
{
    foo test("test");
    bar kick;
    kick.push_back(test);
    kick.at(0).newName("nice");
    kick.at(0).info();

    return 0;
}

我希望程序返回“nice”,但它返回“test”。 我想这与范围有关,但我不知道。 我该如何写一些东西来解决这个问题?

最佳答案

该成员函数

foo at(int i)
    { return _content.at(i); }

返回存储在 vector 中的对象的拷贝。

如果你想得到预期的结果,那么返回引用。

foo & at(int i)
    { return _content.at(i); }

const foo & at(int i) const
    { return _content.at(i); }

关于c++ - 变量内部变量的问题一旦更改就会恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59781270/

相关文章:

C++11 成员初始化列表歧义

c++ - 如何最好地缓解触发非增量链接 (MSVS) 的场景

c++ - 默认构造函数的不同声明的链接器错误

c++ - 使用&符号后跟下划线命名的变量是什么意思?

调用 main 函数方法时发生 Java 引用错误

php - 将多个参数从 php 传递到 shell

c++ - 为什么 C++ 编译器默认不对整数、 float 和指针变量进行零初始化?

c++ - 为什么 std::string 没有大小写、格式等方法?

c++ - nullptr 到底是什么?

C++ Lambda 段错误