tommyyu 发表于 2022-8-13 12:42:51

关于struct中重载运算符的问题

在使用operator重载==、>=、<=、<、>等运算符的时候,向这个重载函数传递的参数是const 类型 变量名,但是在重载+、-等运算符的时候,向他传递的参数是这个参数的引用,请问为什么要这样写

jackz007 发表于 2022-8-13 13:37:06

       你在说什么,莫名其妙,举个例子啊!

tommyyu 发表于 2022-8-13 14:08:09

jackz007 发表于 2022-8-13 13:37
你在说什么,莫名其妙,举个例子啊!

就是上面那个参数为什么要写const number other,下面那个为什么要写number& other

lhgzbxhz 发表于 2022-8-13 16:41:42

不大合理,习惯做法是二元和比较运算符传递的参数类型都是const xxx &类型的。
这里比较运算符传值还可以理解,毕竟这个struct不大。后面传左值引用就没法理解了,这样反而无法兼容右值参数。
这代码是谁写的?感觉不是很值得学习的样子。

ExiaGN001 发表于 2022-8-13 16:42:56

正常情况下不应该啊

tommyyu 发表于 2022-8-13 18:37:20

lhgzbxhz 发表于 2022-8-13 16:41
不大合理,习惯做法是二元和比较运算符传递的参数类型都是const xxx &类型的。
这里比较运算符传值还可以 ...

就是这个都应该是从const xxx &吗

tommyyu 发表于 2022-8-13 18:39:16

lhgzbxhz 发表于 2022-8-13 16:41
不大合理,习惯做法是二元和比较运算符传递的参数类型都是const xxx &类型的。
这里比较运算符传值还可以 ...

我自己按网上找的重载运算符方法写的一个练习的代码,已经是最简单了,只有一个成员{:10_266:}

zhangjinxuan 发表于 2022-8-15 19:31:13

使用引用:
operator+(const &a){}
会相对不用
operator+(const a){}
要快,因为不用引用会将所有参数备份一遍在调用,当struct很大的时候,那就很慢了
比如 对500000个192字节的结构体来一遍sort排序
比较函数加加引用(bool cmp(const test &a,const test &b))用时286毫秒(因配置而异)
不加引用用时513毫秒,当结构体还大一些还会更慢
所以,函数加上引用是一个很好的习惯
页: [1]
查看完整版本: 关于struct中重载运算符的问题