相关疑难解决方法(0)

是==和!=相互依赖?

我学习C++操作符重载,我看到==!=仅仅是可定制的用户定义类型的一些特殊功能.但我担心的是,为什么需要两个单独的定义?我认为如果a == b是真的,则a != b自动为假,反之亦然,并且没有其他可能性,因为根据定义,a != b!(a == b).我无法想象任何情况都不是这样.但也许我的想象力是有限的,或者我对某些东西一无所知?

我知道我可以用另一个来定义一个,但这不是我要问的.我也没有询问按价值或身份比较对象之间的区别.或者两个对象是否可以同时相等且不相等(这绝对不是一个选项!这些东西是相互排斥的).我问的是这个:

是否有任何情况可以提出有关两个对象相等的问题是否有意义,但是询问它们相等是没有意义的?(无论是从用户的角度,还是从实施者的角度来看)

如果没有这种可能性,那么为什么地球上C++会将这两个运算符定义为两个不同的函数?

c++ equality operator-overloading equality-operator

292
推荐指数
11
解决办法
2万
查看次数

避免代码重复定义比较运算符`<,<=,>,> =,==,!=`,但考虑到NaNs的最佳方法?

我数学,x <= y相当于!(x > y).在大多数情况下,这适用于浮点运算,但并非总是如此.当x或者y是NaN,x <= y不是等同于!(x > y),因为比较一个NaN任何事情总是返回false.但是,x <= y <=> !(x > y)大部分时间都是如此.

现在,假设我正在编写一个包含浮点值的类,我想为这个类定义比较运算符.为了明确,假设我正在编写一个高精度浮点数,它在double内部使用一个或多个值来存储高精度数.在数学上,x < y这个类的定义已经定义了所有其他运算符(如果我与比较运算符的通常语义一致).但是,NaNs打破了这个数学上的精确性 所以也许我不得不分别编写许多这些运算符,只是为了考虑NaNs.但有更好的方法吗?我的问题是:如何尽可能避免代码重复并仍然尊重行为NaN

相关:http://www.boost.org/doc/libs/1_59_0/libs/utility/operators.htm.boost /运营商如何解决此问题?

注意:我标记了这个问题,c++因为这是我理解的.请用该语言编写示例.

c++ floating-point operator-overloading comparison-operators

8
推荐指数
1
解决办法
134
查看次数