приоритет преобразования в с ++
У меня есть следующий код:
Some functions:
A::A(int i_a) {cout<<"int Ctor\n";} //conversion constructor
void h(double d) {cout<<"double param\n";} //f1
void h(A a) {cout<<"A param\n";} //f2
В основной функции:
h(1);
Функция, которую вызывает h (1): f1.
У меня вопрос, почему он решил так называть. 1 является целым и поэтому требует неявное преобразование в двойное. Он мог бы так же легко преобразовать int в A, используя конструктор преобразования, определенный выше. Почему я не получаю сообщение об ошибке? Каковы правила приоритета с кастингом?
Нотабене Я разместил выше код, который, я думаю, будет необходим для ответа на вопрос, но ниже я публикую весь код:
#include <iostream>
using namespace std;
class B;
class A {
public:
explicit A(const B&) {cout<<"Ctor through B\n";}
A() {cout<<"Default Ctor\n";}
A(int i_a) {cout<<"int Ctor\n";}
operator int() {cout<<"A => int\n"; return 2;}
};
class B {
public:
operator A() const {cout<<"B => A\n"; A a; return a;}
};
void h(double d) {cout<<"double param\n";}
void h(A a) {cout<<"A param\n";}
void f(const A& a)
{
cout<<"f function\n";
//Without the const it will never try to convert
}
void main()
{
B b;
cout <<"-----------------\n";
f(b);
cout <<"-----------------\n";
h(1);
}