Как происходит неявное преобразование в C ++? - PullRequest
0 голосов
/ 09 ноября 2018

Заранее извиняюсь за этот вопрос. Прошло некоторое время с тех пор, как я использовал C ++, и я не могу найти точное руководство, которое отвечает на мой вопрос. Я думаю это пример неявного преобразования, но я не уверен.

Код:

class Square
{
public:        
    Square(int size) : size{size}
    {
    }

    int getSize() const
    {
        return size;   
    }

private:
    int size;
};

void doSomething(Square square)
{
    cout << "doSomething called with " << square.getSize() << endl;   
}

int main()
{
    // Should be passing in a Square type here, but instead passing an int.
    doSomething(23);
    return 0;
}

Выход:

doSomething called with 23

Вопросы:

  1. Это пример неявного преобразования?
  2. Как это происходит? Я был бы удовлетворен ссылкой, которая объясняет это более подробно. Что бы это ни стоило, я уже рассмотрел объяснение cplusplus.com преобразований типов .

Спасибо!

1 Ответ

0 голосов
/ 09 ноября 2018

Вкратце: поскольку Square square = 23; будет действительным, вызов doSomething(23) соответствует подписи doSomething(Square square); так работает выбор функции-кандидата в разрешении перегрузки.

Если бы были другие перегрузки doSomething, которые также соответствовали вызову, то перегрузки были бы ранжированы на основе того, какие преобразования были необходимы для каждого.

Код Square square = 23; действителен, потому что Square имеет конструктор преобразования .

...