pierwszeństwo konwersji w c ++

Mam następujący kod:

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

W głównej funkcji:

h(1);

Funkcja wywoływana przez h (1) to f1.

Moje pytanie brzmi: dlaczego to nazywa. 1 jest int i dlatego wymaga niejawnej konwersji na double. Może równie łatwo przekonwertować int na A przy użyciu zdefiniowanego powyżej konstruktora konwersji. Dlaczego nie pojawia się błąd? Jakie są zasady pierwszeństwa w castingu?

N.b. Opublikowałem powyżej kodu, który moim zdaniem będzie konieczny, aby odpowiedzieć na pytanie, ale poniżej zamieszczam cały kod:

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

questionAnswers(2)

yourAnswerToTheQuestion