приоритет преобразования в с ++

У меня есть следующий код:

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);
 }

Ответы на вопрос(2)

Ваш ответ на вопрос