我有以下代码:
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
Run Code Online (Sandbox Code Playgroud)
在主要功能:
h(1);
Run Code Online (Sandbox Code Playgroud)
h(1)调用的函数是f1.
我的问题是它为什么选择这样称呼它.1是一个int,因此需要隐式转换为double.它可以使用上面定义的转换构造函数轻松地将int转换为A.为什么我没有收到错误?什么是铸造的优先规则?
Nb我已经发布了我认为有必要回答这个问题的代码,但是下面我发布了整个代码:
#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 …Run Code Online (Sandbox Code Playgroud) c++ ×1