gpt4 book ai didi

c++ - 为什么移动构造函数需要使用 "rvalue reference"?

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

例如,以下移动构造函数在没有 &&(右值引用)的情况下工作:

Obj::Obj(Obj& obj) : elem { obj.elem }, data(obj.data) {

obj.elem = nullptr;
obj.data = 0;

}

我真的不明白为什么有必要......

最佳答案

右值引用参数将拒绝绑定(bind)到非右值引用。由于此限制,move 操作只会发生在被移动的对象以后永远无法在代码中显式引用时(因为它是一个被丢弃的临时对象,或者一个被返回的局部变量) ),或者因为调用者显式地从它们中移动d。

要了解为什么需要这样做,您可以查看 auto_ptr 的历史记录,或者您可以阅读这个使用您的 Obj 类型的示例:

int main() {
Obj a;
Obj b = a; // oops! You just *moved* a into b!
}

使用适当的 move 构造函数,仅当右侧是一个将以编译器可以检测到的方式立即丢弃的值时,它才会被调用,或者您调用 移动

最重要的是,& 引用拒绝绑定(bind)到临时对象——临时对象只能绑定(bind)到 const&&&

关于c++ - 为什么移动构造函数需要使用 "rvalue reference"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18147929/

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