gpt4 book ai didi

C++11 move 构造函数和赋值运算符

转载 作者:太空狗 更新时间:2023-10-29 21:44:22 25 4
gpt4 key购买 nike

关于 move 语义隐含用法的一个相对简单的问题,

当我们有

A func();

以下代码:

A a;

a = func();

将调用 A 的默认构造函数,然后调用 A 的复制构造函数来创建/返回临时对象,然后复制赋值运算符将其分配给对象 a。

如果已经为 A 定义了一个 move 构造函数和一个 move 赋值,那么在创建临时/右值的最后一个语句中实际调用什么?会不会是复制构造函数后跟 move 赋值?

最佳答案

创建临时对象是通过 move 构造函数完成的,如果有并且返回值可以被视为右值,否则使用复制构造函数。如果函数适用于返回值优化,这可能会被省略。

分配给 a 是通过 move 赋值运算符完成的(如果有的话),否则使用复制赋值运算符。这是因为临时值是一个右值

关于C++11 move 构造函数和赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20270732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com