一周stackoverflow热门问题选登:“==” 和 “!=” 相互依存吗?​

来源:互联网 发布:cd windows syswow64 编辑:程序博客网 时间:2024/06/16 02:35

提问: ”==” 和 “!=” 相互依存吗?


我学习C++操作符重载,我看到的是==和!=仅是可实现用户定义类型的一些特殊功能。然而,我考虑的是,为什么有需要两个单独的定义?我认为,如果a==b为真,那么a!=b为自动假的,反之亦然,并没有其他的可能性,因为,根据定义,a!=b就是!(a==b)。我无法从任何情况想象到这是不正确的。但也许我的想象力是有限的,或我是无知的东西吗?


我知道我可以在其他方面定义,但是这不是我的问题。我也没有问通过值或特性比较对象之间的区别。或者两个对象在同一时间可能是否相等或者不等(这绝对不是一种选择!这些东西是相互排斥的)。我想咨询一下是这样的:


是否在任何可能的情况下去询问两个对象是相等的有一定道理,但询问他们不是等于没有意义吗? (无论从用户的角度来看,还是实施者的角度)


如果没有这样的可能性,为什么在地球上C++会有这两种操作符被定义成两种有区别的功能?



投票最多的回答:


当如果a == b返回非布尔类型值时你不会想用语言来自动重写 a != b as !(a == b)。这里面有几个原因。


您可能有表达式生成器对象,其中 a == b不打算进行任何比较,而只是建立代表a == b的一些表达式节点。


您可能延迟计算,其中a == b不适合直接进行任何比较,而是返回某种延迟加载布尔类型的类,可以在一段时间后实现显示或者隐式的布尔比较。可能与表达式生成器对象相结合,使计算前完整地表达优化。


你可能有一些自定义可选<T>模板类,这里给出的可选变量,t和u,你要允许将t == u,但要返回可选的<布尔>。


有可能是更多的,我没有想到的。而且即使在这些例子中操作的a== b和a!=b两者都做是有意义的,仍然a!=b与!(a == b)并不是一回事,所以需要单独的定义。


有兴趣的话可以关注我的微信公众号:学点编程吧


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为账号手机号显示已被注册怎么办 买了鑫和陌车的怎么办 注册游戏账号时乱输入的邮箱怎么办 yy频道解邦不能开直播怎么办 淘宝的淘金币快过期了怎么办 乐透啦彩票让骗了6万怎么办 交了认筹金不能进抢购平台怎么办 爱奇艺会文学会员办了想退款怎么办 海淘信用卡入账但是砍单怎么办 褐色分泌物流了好几天了怎么办? 淘宝买的衣服一直不发货怎么办 从国外寄东西到国内被税了怎么办 百度网盘上传文件数量有限制怎么办 腾讯视频上传文件过限制大小怎么办 三星s7打网页又卡又慢怎么办 路由器的上网账号和口令忘了怎么办 小米笔记本移动热点连接不上怎么办 移动宽带密码重置后认证失败怎么办 移动光纤不记得账号和密码怎么办? 宽带为什么交了钱还是不能用怎么办 小孩被虎牙直播诱导支付了款怎么办 房间里4g网络信号差怎么办 移动4g网络信号不满格怎么办 大风号无法上传视频暂停服务怎么办 过了竞牌保证金交付时间怎么办 亚马逊产品上架后货物没到怎么办 工行企业网银证书过期了怎么办 海淘转运地址国家填错了怎么办 集装箱实重与申报重量不一样怎么办 微博复制的淘口令找不到了怎么办 买了移动手机不能用联通卡怎么办 移动手机用联通卡网速慢怎么办 移动手机插联通卡没反应怎么办 移动手机办了联通大王卡怎么办 qq被冻结但是有至尊宝怎么办 qq被冻结了有至尊宝怎么办 移动电话卡注销了里面的钱怎么办 罗麦的oa上经理喜报没截图怎么办 工行融e联登录密码忘了怎么办 融e借有额度秒拒怎么办 工行银行柜台办理融e借怎么办