c – *** 作符==的两个 *** 作数的隐式转换

c –  *** 作符==的两个 *** 作数的隐式转换,第1张

概述即使没有定义相等的运算符,下面的代码编译并执行没有错误: class A {public: operator bool() const { return true; }};int main(){ A a, b; a == b; //why does this compile? return 0;} 对于一个== b而言内部发生的是对两个 *** 作数都调用了运 即使没有定义相等的运算符,下面的代码编译并执行没有错误:
class A {public:    operator bool() const { return true; }};int main(){    A a,b;    a == b; //why does this compile?    return 0;}

对于一个== b而言内部发生的是对两个 *** 作数都调用了运算符bool()const,然后将两个布尔值进行比较,以相等(这发生在我们的生产代码中,类A是智能指针类型,并在语义上给出可疑的结果).

我的问题是:C标准中的什么规则允许在这种情况下两个 *** 作数的隐式转换?我可以理解,如果另一个 *** 作数已经是一个bool,而不是两个 *** 作数,一个 *** 作数将被隐式转换为bool以进行相等的测试.

@H_301_9@解决方法

I can understand that one operand would be implicitly converted …,but not both

然后你被误解了编辑:根据专家的评论,参数依赖查找似乎是一个你的假设是正确的情况.但你的不是ADL的例子.

What rule in the C++ standard allows for the implicit conversion of both operands

从标准草案:

[over.match] (2.9)

Then the best viable function is selected based on the implicit conversion sequences (13.3.3.1) needed
to match each argument to the corresponding parameter of each viable function.

我强调“每个论据”.不是“单一论证”.

总结

以上是内存溢出为你收集整理的c – *** 作符==的两个 *** 作数的隐式转换全部内容,希望文章能够帮你解决c – *** 作符==的两个 *** 作数的隐式转换所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1253468.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存