首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移动语义和结构

移动语义和结构
EN

Stack Overflow用户
提问于 2013-02-25 19:01:26
回答 1查看 15.1K关注 0票数 11

我有个功能

代码语言:javascript
复制
struct foo {
    std::vector<int> v;
};

foo func();

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-25 19:06:28

它将被移动。(*)

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

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

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

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

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15074404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档