c++ - 应该重载 operator = 返回 class& 或 class

标签 c++ operator-overloading return-by-reference

在谷歌搜索如何重载 operator = 时,我发现了一些例子 返回值 http://www.cprogramming.com/tutorial/operator_overloading.html
,而很久以前我的一个 C++ 大师 friend 告诉我返回引用。另外例如,当我查看 STL 源代码时,我看到了如下内容:

  vector&
  operator=(const vector& __x);

那么正确的做法是什么?

顺便说一句,如果你很好奇,我的 friend 告诉我返回 ref 的原因是因为内置类型返回左值。

int x;
(x = 3) += 2;
// x is now 5.

最佳答案

除了您真的,真的知道自己在做什么的特殊情况,它应该返回class&void。 (而且大多数时候,返回 void 应该只是一个占位符,表示“我很懒惰,还没有抽出时间来确保返回 class& 有意义” )

返回 class 是个坏主意,因为在用户不使用返回值的正常情况下,它会浪费时间和内存(它会生成一个拷贝!),并且会彻底误导用户谁真正使用了返回值(并且仍然浪费时间制作拷贝)。

关于c++ - 应该重载 operator = 返回 class& 或 class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9598572/

相关文章:

c++ - 重用运算符函数返回的对象

python - Python 运算符重载到底是如何工作的?

c++ - 有没有办法从函数返回新对象或对现有对象的引用?

c++ - C++ 代码链接错误 : warning C4190: type has C-linkage specified, 但返回与 C 不兼容的 UDT

c++ - 无法在嵌套模板类型之间转换

c++ - 为什么在模板类静态辅助函数中调用全局函数会导致链接器错误,但在非静态成员函数中不会调用?

c++ - 将复杂对象传递给 C++ 中的函数,但数组订阅运算符无法正常工作

c++ - 我应该使用单个 header 来包含所有静态库 header 吗?

c++ - 值语义与具有大型数据结构的输出参数

objective-c - 将 NSError 返回转换为 CFErrorRef 返回