Требуется объяснение работы конструктора в С++

Есть файл с объявлением класса Stonewt, в котором есть два конструктора.

Stonewt(double lbs, char form = 'P'); 
Stonewt(int stn, double lbs, char form = 'S');   

В основном файле, в функции main() создаю объекты, используя эти конструкторы:

Stonewt pavarotti(260,'S'); // ошибка - более чем 1 соответствующий конструктор
Stonewt wolfe(285.7,'P'); //  всё в порядке
Stonewt taft(21, 8); // всё в порядке
  

Поясните почему компилятор при первом создании объекта не может определить какой конструктор вызвать для создания, но в последнем случае никаких проблем не возникает.

Второй вариант имеет точное соответствие, поэтому тут вопросов нет.

Я понимаю что, в третьем варианте оба аргумента имеют тип int. То есть при создании объекта произойдёт автоматическое преобразование второго аргумента в тип double. Вопрос, почему он все таки решает преобразовать используя этот прототип и не возникает проблемы.

В первом варианте два аргумента аргументы double и char. По логике он может преобразовать double в int, а char в int. Либо выбрать второй вариант и так же преобразовать, соответственно в int и char. Возникает неопределённость.


Ответы (0 шт):