返回 const [duplicate] 的复制赋值运算符的用例

Use cases of a copy assignment operator that returns const [duplicate]

提问人:Amelio Vazquez-Reina 提问时间:1/1/2023 更新时间:1/1/2023 访问量:51

问:

我见过定义复制赋值运算符以返回引用的代码,例如const

const MyClass & operator= (const MyClass &);

我对意图以及如何使用这样的运算符感到困惑。

例如,假设我用它来做一些类似 ( and are objects of ) 的事情。这难道不需要声明为 ,如果是这样,那岂不是意味着我不能修改吗?(即有什么意义?a = babMyClassaconsta

C++ 复制赋值

评论

0赞 HolyBlackCat 1/1/2023
“那不是需要被宣布为const吗”不可以,您可以对非常量对象进行 const 引用。
2赞 Richard Critten 1/1/2023
它打破了“最小惊喜”原则,请参阅此处的预期函数签名 - en.cppreference.com/w/cpp/language/operator_assignment 这将使链分配变得不可能。
0赞 Amelio Vazquez-Reina 1/1/2023
感谢@RichardCritten哪个违反了“最小惊喜”原则?使用还是不使用?(我假设是前者?const
0赞 Amelio Vazquez-Reina 1/1/2023
@HolyBlackCat但在这种情况下(),编译器会抱怨,除非是,对吧?即使它是,它也会抱怨,因为我们正在修改它,不是吗?a=baconst
1赞 Nathan Pierson 1/1/2023
“编译器会抱怨,除非是,对吧?”为什么要这样做?正如所写的那样,实际上要求 that isn ,它允许 be 或 non-,并返回一个引用。考虑一个自由函数。如果你在非 non- 上调用它,你不会指望编译器会抱怨,对吧?aconsta = b;aconstbconstconstconstvoid print(const std::string& str)conststd::string

答: 暂无答案