移动语义和结构
move semantic and struct
我有一个函数
struct foo {
std::vector<int> v;
};
foo func();
从函数返回时,foo内的向量会被移动或复制吗?
它将被移动。(*(
由于您没有为foo
类提供显式移动构造函数,因此编译器将隐式为您生成一个为类的所有成员调用移动构造函数(如果可用(的构造函数。由于std::vector
定义了一个移动构造函数,因此它将被调用。
根据C++11标准第12.8/15段:
非并集类X的隐式定义的复制/移动构造函数执行成员复制/移动其基础和成员。[…]
还要注意,当按值返回对象时,编译器可以省略对类的复制/移动构造函数的调用。这种优化称为(命名(返回值优化。
(*(我在这里假设您的用例是在foo()
中创建一个自动存储的本地对象并返回它。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 何时在引用或唯一指针上使用移动语义
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 在一个微不足道的可复制结构中,移动语义应该实现吗?
- 使用语义操作填充嵌套结构
- 值语义与具有大数据结构的输出参数
- 向包含POD和非POD成员的现有结构添加移动语义
- 一组具有不同 == 和 < 运算符语义的结构
- 提升灵气自定义句法属性(通过语义动作设置结构属性的特定成员)
- 我应该编写自己的数据结构来处理语义解析还是直接在编译器项目中使用STL
- 移动语义和结构
- std::数据结构中的向量移动语义