precedência de conversão em c ++
Eu tenho o seguinte código:
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
Na função principal:
h(1);
A função que h (1) chama é f1.
Minha pergunta é por que ele escolhe chamar isso. 1 é um int e, portanto, requer conversão implícita para double. Ele poderia facilmente converter o int em um A usando o construtor de conversão definido acima. Por que não recebo um erro? Quais são as regras de precedência com o casting?
N.b. Eu postei acima do código que acho que será necessário para responder a pergunta, mas abaixo eu estou postando o código inteiro:
#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);
}