类类型转换(转换构造函数 & 类型转换运算符)
只有一个参数的构造函数可以作为转换构造函数,默认情况下会发生隐式转换,但是如果你对转换构造函数加上了关键字explicit,它就不允许隐式转换,但是你可以通过static_cast等进行强制转换。
而且只允许一步类类型转换,什么意思呢?
比如一个类Str,它有一个构造函数,这个构造函数只需要一个参数,且这个参数类型为string,那么你不可以通过Str s = “qwe”来利用一个临时Str对象初始化s,因为这个临时对象需要两步转换才可以成为Str
第一步:把“qwe”变成string类型
第二步:把string类型通过转换构造函数变成Str类型
Str s = string(“qwe”)——这个就可以
这个说明白了,我们再说一下类型转换运算符:
比如说你在类Str中定义了一个这个类型转换成int类型的类型转换函数,然后默认下如果在下面这种情况下:
Str s;
int b;
int a = s+b;
s就会隐式转换成int类型进行运算(也可以对它使用explicit来禁止其隐式转换)
类型转换运算符形式:
operator type() const; //type可以是int、double、bool这些类型。不允许有形参,返回值类型为type