相关疑难解决方法(0)

c ++中的转换优先级

我有以下代码:

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++

4
推荐指数
1
解决办法
2338
查看次数

标签 统计

c++ ×1