c++ - 隐式 move 方法是否始终保留基本数据?

标签 c++ c++11 copy move move-semantics

我的理解是,当一个基本数据类型被 move 时,它总是会执行一个拷贝。
例如,您永远不能从 int move ,并且没有指定原始 int 值:

#include <iostream>

int main() {

    int x = 100;
    int y{std::move(x)};
    std::cout << x << " " << y; //always prints "100 100"

}

这是否意味着用户定义类型中的基本数据类型也是如此?

#include <iostream>
#include <vector>

struct Foo{
    int i = 100;
    std::vector<int> vec={1,2,3,4,5}; //something that probably will have an invariant
};

int main() {

    Foo x;
    Foo y{std::move(x)};
    std::cout << x.i << " " << y.i; //always print "100 100"?

}

关于在 move 后保留这些基本类型值,标准怎么说?

最佳答案

编译器生成的特殊成员函数被指定为基本上对类的每个成员(和基类)进行相应的操作。

所以您的struct Fooi 将表现得像一个被移出的intvector 也是如此。

关于c++ - 隐式 move 方法是否始终保留基本数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39704648/

相关文章:

php - 使用不同表中的关系复制 mysql 中的记录

c++ - 如何防止连续使用 'new' 分配失败时发生内存泄漏

c++ - &decltype(object)::memfn 是误用吗?

Java——读取、处理和写入UTF-8文件

vim - 如何在vim中使用鼠标选择一段文本并将其粘贴到当前光标位置?

c++ - C++ 11 是否支持模板类反射?

c++ - 如何将字符串转换为 ZZ 数字?

c++ - 如何在 NVIDIA GPU 上处理来自 CPU 的 RGB 数据并使用 OpenGL 纹理可视化数据

c++ - 在没有默认构造函数的情况下初始化类

c++ - T& 对于某些模板参数 T 意味着什么?