Почему используется преобразование в int, а не в bool? - PullRequest
3 голосов
/ 13 июня 2019

Я реализовал два преобразования для класса. Один должен кипеть, другой - инт &.

Если я неявно конвертирую в int, он использует int & translation, но если мне нужен bool, он все равно использует int & translation.

struct A
{
    operator bool() const;
    operator int&();
};

// trying to call these:
A a;
int  i_test = a; // calls operator int&()
bool b_test = a; // calls operator int&()

Я понимаю, что a неявно преобразуется в int &, а затем в bool, но почему это занимает более длинный путь? Как я могу избежать этого без необходимости писать a.operator bool()?

1 Ответ

6 голосов
/ 13 июня 2019

A a; объявляет неконстантный объект.Поскольку функция преобразования является функцией-членом, она принимает неявный указатель this, который указывает на a.А разрешение перегрузки выберет неконстантный квалифицированный элемент, так как он вызывается для неконстантного объекта.

Тот факт, что это было преобразование в bool, которое вызвало разрешение перегрузки, является чем-то вроде красной сельди.Тип возврата функции (int& или bool) только делает их кандидатами на разрешение перегрузки (поскольку они будут работать для преобразования в bool), но этого недостаточно для определения результата самого разрешения перегрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...