【发布时间】:2014-05-22 12:51:49
【问题描述】:
我有这个问题:
void foo(vector<int> &a){
vector<int> b;
b.push_back(1); // in general many push backs
a = b;
}
由于 b 是一个局部变量,它将在 foo 结束时被删除。 a 会保留 b 中插入的值吗? 我试过了,但可能只是偶然。
感谢您的帮助。
编辑:
我认为这回答了我的问题。不是吗? http://www.cplusplus.com/reference/vector/vector/operator=/ 所以基本上 a 将保留 c++98 中的值。但我无法完全理解它在 c++11 中的作用。
【问题讨论】:
-
为什么不将
push_back转移到a? -
Jarod42 所说的。你也可以考虑
a = std::move(b)。这将使分配更快,因为不需要副本,但代价是b之后包含垃圾,这很好,因为它无论如何都会死。 -
如果对
a的唯一修改是此分配,您可能需要考虑返回该向量。 --a = foo();是一个比foo(a);更容易被发现的副作用。
标签: c++ c++11 vector side-effects