正如C++内置类型在赋值时可以进行隐式的类型转换,我们也能为类定义隐式转换规则:
class Sale_data
{
public:
Sale_data(const int &x):it(x) {}
Sale_data &combine(const Sale_data &temp)
{
it += temp.it;
return *this;
}
int it = 0;
};
int main()
{
int a = 1;
Sale_data s(3);
s.combine(a);
cout<<s.it;
}
以上代码中,s调用combine函数时,传入int类型实参a,编译器会用a自动创建一个临时的Sale_data对象,这个临时对象被传递给combine,因为combine的参数是一个常量引用,所以可以给该参数传递一个临时量,最终的输出结果是:4
注意,两个参数列表中的const不能丢,因为a用创造的是临时变量,普通引用不能绑定临时变量,而只能用常量引用绑定临时变量。至于构造函数参数列表中的const为什么不能删掉,本人还未搞明白,若有高人看到并予以指导,不胜感激。但由于两个const去掉时报错类型是一样的,均是不能将一个右值绑定在一个普通的引用上,所以本人猜测可能是因为在自动用a构造Sale_data类时,a可能会先将值赋给一个临时变量再进行构造。
另外,Sale_data类的构造函数不能不定义,否则不能自动用a创建临时变量。