<分区>
在什么情况下我们在运算符重载中通过引用传递对象,为什么? 另外,运算符重载在什么情况下有用(特定情况)?
编辑:语言:C++
<分区>
在什么情况下我们在运算符重载中通过引用传递对象,为什么? 另外,运算符重载在什么情况下有用(特定情况)?
编辑:语言:C++
最佳答案
你“通过引用”传递参数是因为你想修改它们(对于运算符你可能不想这样做,见下文),或者仅仅因为传递一个简单的指针比复制一个指针更有效整个对象。
至于“为什么重载”,这主要是一个偏好问题。有一些经典的例子,比如有一个 vector 类可以让你添加 vector 或类似的东西——基本上,这些都是很好的例子,因为它们应用了与算术运算符相同的意义 classes:无论你添加整数还是 vector ,在这两种情况下写“x+y”都是一种自然的表示法。这也是使用常量引用的经典原因——如果你写“a=b+c”,你不希望 b 或 c 被修改,并且如果你的结果是什么,那么只重载运算符绝对是一个好习惯正在做的是读者所期望的。
像智能指针(或迭代器,或其他“假装”为指针的东西)之类的东西喜欢重载运算符,例如 -> 或 *(取消引用运算符,而不是乘法)。同样的道理,这些对象伪装成指针,它们的本意是像指针一样使用,所以使用运算符重载使它们看起来更像指针。
我还重载了“,”运算符以将参数提供给字符串格式化对象——因为它看起来不错。出于同样的原因,STL 使用重载“<<”和“>>”;他们认为这让事情更容易阅读。
最近,我重载了一些算术运算符和“==”,因此我可以用数学符号编写线性方程。周围的代码从可读的源代码构建系数矩阵,而不是要求开发人员编写一堆无意义的数字。这也是一个使用非常量引用的示例 -- 然而,所有这一切的结果是矩阵中表示方程的一行,因此这正是读者所期望的。
基本上,请遵守一条重要规则:永远不要做任何意想不到的事情。仅当像“a+b”这样的结果符号确实是不了解重载内部结构的人所期望的结果时才重载运算符。
关于c++ - 通过引用传递 - 运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11484175/