类型转换
先给出以下代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
class B {
private:
int _a1;
public:
B(int a){
_a1 = a;
}
void Print() {
cout << _a1<< endl;
}
};
int main() {
//实例化对象1
B b(1);
b.Print();
//实例化对象2
B b2 = 2;
b2.Print();
return 0;
}
由以上运行结果可知,我们晓得实例化对象1很正常调用构造函数,但实例化对象2觉得比较奇怪。
这是因为实例化对象2进行了一个隐式类型转换。在数值2赋值给B b2对象时,会默认生成一个临时的拷贝构造(拷贝函数为类的构造函数)。然后在把拷贝构造后的类型给对象b2,进行调用。
如果不想进行类似隐式类型转换,那么就在构造函数前加explicit关键字即可。
(未完待续。。。。。)