Vorrang bei der Konvertierung in c ++

Ich habe folgenden Code:

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

In der Hauptfunktion:

h(1);

Die Funktion, die h (1) aufruft, ist f1.

Meine Frage ist, warum es sich dafür entscheidet, das zu nennen. 1 ist ein int und erfordert daher eine implizite Konvertierung in double. Es könnte genauso einfach das int in ein A konvertieren, indem der oben definierte Konvertierungskonstruktor verwendet wird. Warum erhalte ich keine Fehlermeldung? Was sind die Vorrangregeln beim Casting?

N.b. Ich habe oben den Code gepostet, von dem ich denke, dass er zur Beantwortung der Frage erforderlich ist, aber unten poste ich den gesamten Code:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage