关于struct中重载运算符的问题
在使用operator重载==、>=、<=、<、>等运算符的时候,向这个重载函数传递的参数是const 类型 变量名,但是在重载+、-等运算符的时候,向他传递的参数是这个参数的引用,请问为什么要这样写 你在说什么,莫名其妙,举个例子啊! jackz007 发表于 2022-8-13 13:37你在说什么,莫名其妙,举个例子啊!
就是上面那个参数为什么要写const number other,下面那个为什么要写number& other 不大合理,习惯做法是二元和比较运算符传递的参数类型都是const xxx &类型的。
这里比较运算符传值还可以理解,毕竟这个struct不大。后面传左值引用就没法理解了,这样反而无法兼容右值参数。
这代码是谁写的?感觉不是很值得学习的样子。 正常情况下不应该啊 lhgzbxhz 发表于 2022-8-13 16:41
不大合理,习惯做法是二元和比较运算符传递的参数类型都是const xxx &类型的。
这里比较运算符传值还可以 ...
就是这个都应该是从const xxx &吗 lhgzbxhz 发表于 2022-8-13 16:41
不大合理,习惯做法是二元和比较运算符传递的参数类型都是const xxx &类型的。
这里比较运算符传值还可以 ...
我自己按网上找的重载运算符方法写的一个练习的代码,已经是最简单了,只有一个成员{:10_266:} 使用引用:
operator+(const &a){}
会相对不用
operator+(const a){}
要快,因为不用引用会将所有参数备份一遍在调用,当struct很大的时候,那就很慢了
比如 对500000个192字节的结构体来一遍sort排序
比较函数加加引用(bool cmp(const test &a,const test &b))用时286毫秒(因配置而异)
不加引用用时513毫秒,当结构体还大一些还会更慢
所以,函数加上引用是一个很好的习惯
页:
[1]