C++ 构造函数与类型转换函数全解
注意什么时候调用构造函数,什么时候调用类型转换函数。
以下各种情况,分别调用了什么函数?
class Length;
class Meter;
Meter m;
// case 1
Length l = m;
// 答案:同时存在转换构造函数和类型转换函数时,如果转换构造函数没有explicit修饰,编译器报错(因为不知道使用这两个函数中的哪一个进行类型转换)。
// 如果转换构造函数加了explicit修饰,调用Length类的类型转换函数+拷贝构造函数
// case 2
Length l(m);
// 答案:调用转换构造函数
// case 3
Length l{m};
// 答案:调用转换构造函数
// case 4
Length l;
l = m;
// 答案:调用Length类的类型转换函数+拷贝构造函数
// case 5
Length l;
l = Length(m);
// 答案:调用转换构造函数
// case 6
Length l;
l = Length{m};
// 答案:调用转换构造函数
转换构造函数 与 类型转换函数:
class Length {
public:
Length() {}
// 转换构造函数.
explicit Length(const Meter& d) {
std::cout << "调用转换构造函数\n";
}
// 拷贝构造函数.
Leng