Что означает " оператор bool () const"



например:

operator bool() const 
{ 
    return col != 0; 
}

col - это int. Как это operator bool() const работы?

7   60  

7 ответа:

функции-члены формы

operator TypeName()

операторы преобразования. Они позволяют использовать объекты типа класса, как если бы они были типа TypeName и когда они есть, они преобразуются в TypeName С помощью функции преобразования.

в данном случае operator bool() позволяет использовать объект типа класса, как если бы он был bool. Например, если у вас есть объект типа класса с именем obj, вы можете использовать его как

if (obj)

этой operator bool(), вернуть результат, и использовать результат в качестве условия if.

следует отметить, что operator bool() Это очень плохая идея, и вы действительно никогда не должны использовать его. Подробное объяснение, почему это плохо и для решения проблемы, см.

operator bool() const 
{
    return col != 0;
}

определяет, как класс преобразуется в логическое значение,const после () используется для указания, что этот метод не мутирует (изменить члены этого класса).

обычно такие операторы используются следующим образом:

airplaysdk sdkInstance;
if (sdkInstance) {
    std::cout << "Instance is active" << std::endl;
} else {
    std::cout << "Instance is in-active error!" << std::endl;
}

Я хотел бы дать больше кодов, чтобы сделать это ясно.

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

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

int main()
{
    A a1;
    if (a1) cout << "true" << endl; // OK: A::operator bool()
    bool na1 = a1; // OK: copy-initialization selects A::operator bool()
    bool na2 = static_cast<bool>(a1); // OK: static_cast performs direct-initialization

    B b1;     
    if (b1) cout << "true" << endl; // OK: B::operator bool()
    // bool nb1 = b1; // error: copy-initialization does not consider B::operator bool()
    bool nb2 = static_cast<bool>(b1); // OK: static_cast performs direct-initialization
}

это определяется пользователем implicit функция преобразования для преобразования вашего класса в любой true или false.

//usage
bool value = yourclassinstance; //yourclassinstance is converted into bool!

это неявное преобразование к bool. Т. е. везде, где неявные преобразования разрешены, ваш класс может быть преобразован в bool путем вызова этого метода.

как говорили другие, это для преобразования типа, в данном случае в bool. Например:

class A {
    bool isItSafe;

public:
    operator bool() const
    {
        return isItSafe;
    }

    ...
};

Теперь я могу использовать объект этого класса, как если бы он был логическим:

A a;
...
if (a) {
    ....
}

другое общее использование для контейнеров std для сравнения равенства по ключевым значениям внутри пользовательских объектов

class Foo
{
    public: int val;
};

class Comparer { public:
bool operator () (Foo& a, Foo&b) const {
return a.val == b.val; 
};

class Blah
{
std::set< Foo, Comparer > _mySet;
};