移动语义和结构

move semantic and struct

本文关键字:结构 语义 移动      更新时间:2023-10-16

我有一个函数

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

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

它将被移动。(*(

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

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

非并集类X的隐式定义的复制/移动构造函数执行成员复制/移动其基础和成员。[…]

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

(*(我在这里假设您的用例是在foo()中创建一个自动存储的本地对象并返回它。