函数参数类型隐式转换规则
#include <iostream>
#include <string.h>
using namespace std;
class B
{
public:
B()
{
cout<<"default constructor"<<endl;
}
B(const B &b)
{
cout<<"copy default constructor"<<endl;
data = b.data;
}
B(int i):data(i)
{
cout<<"parameter constructor "<<data<<endl;
}
~B()
{
cout<<"deconstructor "<<endl;
}
private:
int data;
};
B play(B b)
{
return b;
};
int main()
{
B t1 = play(5);
B t2 = play(t1);
}
这段代码运行结果
parameter constructor 5
copy default constructor
deconstructor
copy default constructor
copy default constructor
deconstructor
deconstructor
deconstructor
我好奇的是,
为什么play(5)能够执行成功,其定义的形参类型明明是B,按我的理解应该报编译错误