10

我有一个功能

struct foo {
    std::vector<int> v;
};

foo func();

从函数返回时, foo中的向量会被移动或复制吗?

4

1 回答 1

11

它将被移动。(*)

由于您没有为您的foo类提供显式移动构造函数,编译器将为您隐式生成一个为您的类的所有成员调用移动构造函数(如果可用)。由于std::vector定义了一个移动构造函数,它将被调用。

根据 C++11 标准的第 12.8/15 段:

非联合类 X 的隐式定义的复制/移动构造函数执行其基类和成员的成员复制/移动。[...]

另请注意,当按值返回对象时,允许编译器省略对类的复制/移动构造函数的调用。这种优化称为(命名)返回值优化

(*)我在这里假设您的用例是创建一个内部具有自动存储的本地对象foo()并将其返回。

于 2013-02-25T19:06:28.210 回答