我无法弄清楚push_back(const value_type& val)
的工作原理,在docs中说到val
val is Value to be copied (or moved) to the new element ...
通过引用引用val
时如何复制?
该复制是否会调用val
的复制构造函数?
这到底是怎么回事?
#include <iostream>
#include <vector>
using namespace std;
struct x
{
x(int v = 0) : v(v) {}
int v;
};
vector<vector<x>> parts;
void fillParts()
{
vector<x> values = { x(1), x(2), x(3) };
parts.push_back(values);
}
int main()
{
fillParts();
parts[0][0].v = -123;
cout << parts[0][0].v; // -123
return 0;
}
这没有任何错误,
是
parts[0]
是对本地向量values
的引用还是副本?如果它是参考,它是否应该至少给出一些警告,说明您正在访问和修改已释放堆栈的本地对象?
最佳答案
通过引用引用val时如何复制?
想想一个复制构造函数。
它通过引用获取参数,并且可以完美地执行复制。
class Bar
{
public:
Bar(const Bar & rhs); // by reference, to copy.
};
那个复制会调用val的复制构造函数吗?
复制操作使用复制构造函数。
通过提供用户定义的构造函数,您实际上可以查看它是被复制还是被移动。
struct x
{
public:
x(const x & rhs)
{
// Some copy operation.
std::cout << "Copied" << std::endl;
}
x(x && rhs)
{
// Some move operation.
std::cout << "Moved" << std::endl;
}
};
关于c++ - vector 推回澄清,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39077420/