c – 为什么我的“显式运算符bool()”没有被调用?

前端之家收集整理的这篇文章主要介绍了c – 为什么我的“显式运算符bool()”没有被调用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <iostream>

using namespace std;

struct A
{
    explicit operator bool() const
    {
        return true;
    }

    operator int()
    {
        return 0;
    }
};

int main()
{
    if (A())
    {
        cout << "true" << endl;
    }
    else
    {
        cout << "false" << endl;
    }
}

我的期望是A()将使用我的运算符bool()从上下文转换为bool,因此打印为true.

但是,输出为false,表示调用了运算符int().

为什么我的显式运算符bool未按预期调用

解决方法

因为A()不是const,所以选择了运算符int().只需将const添加到其他转换运算符即可:
#include <iostream>

using namespace std;

struct A
{
    explicit operator bool() const
    {
        std::cout << "bool: ";
        return true;
    }

    operator int() const
    {
        std::cout << "int: ";
        return 0;
    }
};

int main()
{
    if (A())
    {
        cout << "true" << endl;
    }
    else
    {
        cout << "false" << endl;
    }
}

Live Example打印:“bool:true”并且没有const它打印“int:false”

或者,创建一个命名常量:

// operator int() without const

int main()
{
    auto const a = A();

    if (a)
    // as before
}

Live Example打印“bool:true”.

猜你在找的C&C++相关文章