我有个功能
struct foo {
std::vector<int> v;
};
foo func();从函数返回时,foo中的向量会被移动或复制吗?
发布于 2013-02-25 19:06:28
它将被移动。(*)
由于您没有为您的foo类提供显式的移动构造函数,所以编译器将为您隐式地为类的所有成员调用移动构造函数(如果可用的话)。因为std::vector定义了一个移动构造函数,所以它将被调用。
根据C++11标准第12.8/15段:
非联合类X的隐式定义复制/移动构造函数执行其基和成员的成员级复制/移动。..。
还请注意,在按值返回对象时,编译器可以隐藏对类的复制/移动构造函数的调用。这种优化称为(命名)返回值优化。
(*)我在这里假设您的用例是创建一个具有foo()内部自动存储的本地对象,并返回它。
https://stackoverflow.com/questions/15074404
复制相似问题