gpt4 book ai didi

c++ - 这个赋值运算符后面的 & 是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 13:57:38 24 4
gpt4 key购买 nike

我正在阅读这篇 nice answer关于“五规则”,我注意到一些我不记得以前见过的东西:

class C {
...
C& operator=(const C&) & = default;
C& operator=(C&&) & = default;
...
};

=default 前面的 & 字符对于复制赋值运算符和移动赋值运算符有什么作用?有人有这方面的引用吗?

最佳答案

这是允许 C++11 非静态成员函数区分它们是在左值还是右值上调用的功能的一部分。

在上述情况下,这里默认的复制赋值运算符只能在左值上调用。这使用了成熟的左值和右值引用绑定(bind)规则;这只是为 this 建立它们。

在上述情况下,只有当被复制到的对象可以绑定(bind)到非 const 左值引用时,才会默认复制赋值运算符。所以这很好:

C c{};
c = C{};

这不是:

C{} = c;

这里的临时不能绑定(bind)到左值引用,因此不能调用复制赋值运算符。并且由于此声明将阻止创建通常的复制赋值运算符,因此此语法有效地防止复制分配(或移动分配)到临时对象。为了恢复它,您需要添加一个 && 版本:

C& operator=(const C&) && = default;
C& operator=(C&&) && = default;

关于c++ - 这个赋值运算符后面的 & 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12306226/

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