首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动生成移动操作的规则是什么?

自动生成移动操作的规则是什么?
EN

Stack Overflow用户
提问于 2014-06-21 15:12:28
回答 1查看 7.6K关注 0票数 38

在C++98中,C++编译器可以通过成员级拷贝自动生成复制构造函数和复制赋值操作符。

代码语言:javascript
复制
struct X {
    std::string s;
    std::vector<int> v;
    int n;
};

编译器使用成员级复制自动生成X的复制构造函数和复制赋值操作符.

但是在C++11中,移动语义是如何改变的呢?

是否自动生成构造函数move 赋值运算符,如复制构造函数和复制赋值运算符?

是否存在不自动生成移动操作的情况?

EN

回答 1

Stack Overflow用户

发布于 2014-07-01 14:32:33

Nikos Athanasiou给出了一个很好的答案,但我想添加这个工具,我认为它非常有用。

这是霍华德·辛南特2014年ACCU会议的演讲“你想知道的所有关于移动语义的知识(然后是一些)”的截图,我认为它非常好地提醒了自动生成特殊成员的规则:

辛南特先生对评论所作的澄清:

幻灯片没有这么说,但红色方块表示不推荐的行为。也就是说,如果您不想依赖于不推荐的行为,那么如果您声明析构函数,则声明两个副本成员,或者声明一个副本成员(基本上遵循C++98/03“3的规则”)

我建议阅读幻灯片,以获得这个表的渐进结构,并详细解释我们现在是如何和为什么要这样做的。

其他演示文稿可以在那里找到:http://accu.org/index.php/articles/1901

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

https://stackoverflow.com/questions/24342941

复制
相关文章

相似问题

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