由转换造函数进行的类型转换称为隐式转换,由类型转换运算符进行的转换称为显式转换。
类型转换运算符(conversion operator)是类的一种特殊成员函数,它负责将一个类类型的值显式地转换成其他类型。类型转换函数的一般形式如下:
operator type() const;
其中type表示某种类型,类型转换运算符可以面向任意类型(除了void之外)进行定义,只要该类型能作为函数的返回类型。因此我们不允许转换成数组或函数类型,但允许转换成指针或引用类型。类型转换类型既没有显式的返回类型,也没有形参,而且必须定义成类的成员函数。
类型转换符通常不应该改变待转换对象的内容,因此类型转换运算符一般被定义成const成员。
示例:
class Integer {
public:
int data;
Integer(int data)
{
this->data = data;
std::cout << "Integer(int data)" << std::endl;
}
operator int() const
{
std::cout << "operator int() const" << std::endl;
return data;
}
};
int main()
{
Integer v1(3);
std::cout << v1 << std::endl; // 并无 Integer 的 << 重载,先将 v1 通过 operator int() const 转换成 int 类型,再输出
// 输出如下:
// Integer(int data)
// operator int() const
// 3
return 0;
}