看不懂的类型转换(有待解决)
看不懂的类型转换,如下两种转换h1,h2都经过HowMany(int a =0 ) : int_class(a) {}这个函数,成员变量int_class被赋值5。
#include <iostream>
#include <string>
using namespace std;
class HowMany {
int int_class;
public:
HowMany(int a =0 ) : int_class(a) {}
HowMany(const HowMany& b) : int_class(b.int_class)
{
cout << "output HowMany(HowMany&)" <<endl;
}
void print()
{
cout <<"int_class = " << int_class <<endl;
}
~HowMany()
{
cout << "~HowMany()" <<endl;
}
};
int main() {
HowMany h1=5;//为什么不能通过隐式类型转换,将int型转换为HowMany型,然后调用复制构造函数,将
//临时对象复制给h1 ?
int i = 5; //第二种情况
HowMany h2=i;
}
有人说:HowMany h1=i; 对于这样的表达式,首先要肯定的是会调用拷贝构造函数的;这点是毋庸置疑的。
由于HowMany类有个单参数构造函数,所以,在程序中如果碰到这种参数,但上下文中要求在这个位置上是一个HowMany的实例,那么编译器将会帮你调用这个单参数构造函数,这里即是这样。
而HowMany h1 = i; 这行代码是对h1的声明定义和初识化,并且是利用i生成的临时的HowMany对象来作为参数调用拷贝构造函数初始化对象h1
另外一种说法:这里实际上调用的还是第一个构造函数。看编译器怎么实现了。