C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 逻辑运算符执行顺序大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有关于运算符重载的问题,并附带一个有趣的代码

#include <iostream>

class A {
public:
    operator bool() {
        return true;
    }

    bool operator!() {
        return false;
    }
};

int main() {
    A a;

    if (!a) {
        std::cout << "HelLO";
    } else {
        std::cout << "WORLD";
    }
    std::cout << std::endl;

    return 0;
}

什么将首先被称为什么?为什么?这是在cppreference的任何地方描述的吗?

附:对于那些认为我自己无法执行此代码的downVoters和其他人.我可以.我做到了.我已多次改变它以查看它的行为.所以呢?这不是解释.我已经要求提供一个,清楚地说明了这个代码服从的规则.它在我的机器上如何工作的信息并没有回答这个问题 – 如果它甚至不能在不同的环境(操作系统,可能是处理器等)中移植,该怎么办

解决方法

它的工作原理很简单.编译器解析源并查看是否(!a).然后它检查A是否定义了一个运算符!就是这样.这样就被召唤了.

如果它已经看过(a)它是否会检查A是否可以转换为可以在if的条件下使用的东西.碰巧它确实可以转换.

如果没有运算符!,编译器会检查A可以转换为可能在逻辑上否定的东西.然后将执行转换为bool.

便说一下,即使在令人惊讶的地方也会发生转换.例如,1将编译.我认为不是我们想要的.最好只允许boo在上下文中的位置.您可以通过显式标记转换运算符来实现:

explicit operator bool() {
    return true;
}

大佬总结

以上是大佬教程为你收集整理的c – 逻辑运算符执行顺序全部内容,希望文章能够帮你解决c – 逻辑运算符执行顺序所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。