почему без оператора, приведенного к типу double, используется тот, который используется для умножения на double. Это из-за неявного приведения?
Да, это правда.
Он использует operator int ()
для преобразования obj_2
в int, а затем использует встроенный operator*(double, int)
почему с включенным приведением к double
(добавление большей ясности к синтаксису), который не учитывается?
Когда вы предоставляете как operator double()
, так и operator int ()
для своего класса, это создает двусмысленность, будь то преобразование obj_2
в int
или double
, потому что есть две встроенные перегрузки операторов, которые он может использовать, а именно:
operator*(double, int)
operator*(double, double)
Предложение:
Вам следует перегружать operator*
для вашего класса, если вы хотите избежать этой проблемы неявных преобразований и возникновения двусмысленности над ней.
operator*(double,CA) and
operator*(CA,int)