无法修改数组中的对象队列

Jac*_*ack 0 c++ c++11

#include<iostream>
#include<deque>
struct testStr {
    std::deque<int> queue;
};

testStr arr[1] = {
    testStr()
};

testStr t = testStr();

void func() {
    testStr s = arr[0];
    s.queue.push_back(5);
    t.queue.push_back(6);
}

void func2() {
    std::cout << arr[0].queue.empty() << ' ';
    std::cout << t.queue.empty() << '\n';
}

int main() {
    func();
    func2();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

1 0
Run Code Online (Sandbox Code Playgroud)

我花了一个小时来追踪这个"错误"并且不明白为什么会出现这种行为以及如何克服它.感谢这里的任何和所有帮助.

Edg*_*jān 5

testStr s = arr[0];
Run Code Online (Sandbox Code Playgroud)

您复制arr[0]到本地变量s,然后修改s,而不是arr[0].在同一时间arr[0]保持不变.

如果您需要修改arr[0],请使用参考:

testStr &s = arr[0];
Run Code Online (Sandbox Code Playgroud)