operator

未分类

比较运算符, Min, Max, Sort 和 Order

惭愧,突然发现又是没有blog的一年。这一年不断在尝试搞大新闻,写点大东西,到现在也没憋出来。倒是又在学习新东西的过程中看到了一些零碎的小知识,很有意思. 很巧,这个也是和比较运算符相关的,和一年前的blog竟然有所重合。 还是先上结论: 当需要为类型T定义比较运算符时,所有运算符最好保证语义整体一致 * 一般来说,这很容易达到,我们只需要实现operator<(lhs,rhs),即可引申定义出其余几个比较运算符. * 定义operator<=为 !(rhs < lhs) * 定义operator>为 rhs < lhs * 定义operator>=为 !(lhs < rhs) * 定义operator= 为!(lhr < rhs) && !(rhs < 1hs) * 定义operator!= 为

By Edimetia3D

C++系列

[Cpp基础][10]重载运算符

重载运算符 规定 * 赋值,取下标,调用,箭头,类型转换,这些运算符只能作为成员函数. * 用户重载的&&与||不会进行短路求值. 习惯 * 重载主要分为全局重载和类内重载,一般而言,二元运算都应该在全局重载(顺序问题). * 改变对象状态的运算符一般应当设为成员函数,拥有对称性的运算符一般应在类外重载. * 从技术层面说,重载运算符的参数可以是指针类型的,但是这一般与我们使用语言的习惯不符,所以形参类型最好只是T或T&,而不要是指针. * 定义有关联的重载运算符时一定要考虑兼容性,例如a<b为假,a>b也为假,那么a==b就应该返回真. * 重载中应当尽可能的保持语义与内置风格一致. * 例如,如果重载了++运算符,那么应当保证++x和x+=1及x=x+1有同样的效果. * 尽量不要重载全局的operator new,仅在类内重载它. * 类内重载的new和delete都是static的,因此,无法使用this相关的量

By Edimetia3D