具有std :: string属性的默认移动构造函数行为

生锈的

我有一个简单的数据类,我想在其中保存一些类型并让编译器生成move构造函数和赋值运算符:

class A
{
public:
  A(int x, std::string&& y) : x_(x), y_(std::move(y)) {}
  A(A && a) = default;
  A& operator= (A && a) = default;
private:
  int x_;
  std::string y_;
};

假设我的编译器是100%C ++ 11兼容的,它将对std::string y_属性执行正确的操作吗?它将对它应用移动语义吗?

巴里

来自[class.copy]的规则是:

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

因此,在这种情况下,它将同时移动和构造/分配x_y_A您正在移动构造/分配的位置开始。


请注意,如果默认的move构造函数的成员之一未隐式定义move构造函数,则可以执行副本

struct A {
    A() { }
    A(A const& ) { }
    // A(A&& ) not implicitly defined because of the copy ctor
};

struct B {
    B() = default;
    B(B&& ) = default;
    B& operator=(B&& ) = default;

    A a;
};

B b;
B c = std::move(b); // copy-constructs c.a from b.a

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有默认参数的Unity构造函数

来自分类Dev

具有移动构造函数和分配的类的默认副本构造函数和分配

来自分类Dev

具有自动默认值和移动构造函数的不可复制类

来自分类Dev

std :: bind成员函数具有多个参数

来自分类Dev

具有重载成员函数的C ++ std :: mem_fn

来自分类Dev

具有类内初始化的默认默认构造函数的行为是什么?

来自分类Dev

std :: unordered_map :: emplace行为,没有移动/复制构造函数

来自分类Dev

具有std :: vector和std :: set属性的容器?

来自分类Dev

从char *中移动std :: string的构造函数

来自分类Dev

std :: basic_string是否正式具有隐式生成的move构造函数?

来自分类Dev

具有默认行为的函数指针

来自分类Dev

具有std :: function参数的函数不接受lamba函数

来自分类Dev

std :: sort具有多个属性的相等对象

来自分类Dev

复制或移动具有成员std :: mutex(或其他不可复制对象)的类的构造函数?

来自分类Dev

具有私有构造函数的std :: map中的C ++ 11类作为Value

来自分类Dev

未初始化的串行端口属性是否具有使用默认构造函数时的默认值?

来自分类Dev

为什么使用默认构造函数构造std :: string对象时,其行为会有所不同?

来自分类Dev

std :: vector是否具有引用的副本构造函数?

来自分类Dev

具有std :: map <T *,U>的程序是否具有定义明确的行为?

来自分类Dev

具有单个互斥锁的std :: scoped_lock行为

来自分类Dev

构造函数采用std :: string_view与std :: string并移动

来自分类Dev

具有其他构造函数的默认结构构造

来自分类Dev

具有移动语义的RAII类中的默认构造函数应该做什么?

来自分类Dev

另一个类的移动构造函数中的移动类(没有默认构造函数)

来自分类Dev

具有额外属性的子类构造函数

来自分类Dev

std :: basic_string是否正式具有隐式生成的move构造函数?

来自分类Dev

具有私有构造函数的std :: map中的C ++ 11类作为Value

来自分类Dev

std :: vector是否具有{元素的初始数量}构造函数?

来自分类Dev

从Guice到Spring:具有默认构造函数和属性处理的Bean

Related 相关文章

  1. 1

    具有默认参数的Unity构造函数

  2. 2

    具有移动构造函数和分配的类的默认副本构造函数和分配

  3. 3

    具有自动默认值和移动构造函数的不可复制类

  4. 4

    std :: bind成员函数具有多个参数

  5. 5

    具有重载成员函数的C ++ std :: mem_fn

  6. 6

    具有类内初始化的默认默认构造函数的行为是什么?

  7. 7

    std :: unordered_map :: emplace行为,没有移动/复制构造函数

  8. 8

    具有std :: vector和std :: set属性的容器?

  9. 9

    从char *中移动std :: string的构造函数

  10. 10

    std :: basic_string是否正式具有隐式生成的move构造函数?

  11. 11

    具有默认行为的函数指针

  12. 12

    具有std :: function参数的函数不接受lamba函数

  13. 13

    std :: sort具有多个属性的相等对象

  14. 14

    复制或移动具有成员std :: mutex(或其他不可复制对象)的类的构造函数?

  15. 15

    具有私有构造函数的std :: map中的C ++ 11类作为Value

  16. 16

    未初始化的串行端口属性是否具有使用默认构造函数时的默认值?

  17. 17

    为什么使用默认构造函数构造std :: string对象时,其行为会有所不同?

  18. 18

    std :: vector是否具有引用的副本构造函数?

  19. 19

    具有std :: map <T *,U>的程序是否具有定义明确的行为?

  20. 20

    具有单个互斥锁的std :: scoped_lock行为

  21. 21

    构造函数采用std :: string_view与std :: string并移动

  22. 22

    具有其他构造函数的默认结构构造

  23. 23

    具有移动语义的RAII类中的默认构造函数应该做什么?

  24. 24

    另一个类的移动构造函数中的移动类(没有默认构造函数)

  25. 25

    具有额外属性的子类构造函数

  26. 26

    std :: basic_string是否正式具有隐式生成的move构造函数?

  27. 27

    具有私有构造函数的std :: map中的C ++ 11类作为Value

  28. 28

    std :: vector是否具有{元素的初始数量}构造函数?

  29. 29

    从Guice到Spring:具有默认构造函数和属性处理的Bean

热门标签

归档