c++除了可以重载运算操作符,还可以重载类型操作符。
operator TypeName(), 类型操作符,重载了此类操作符后,可以将Class类型的object当作TypeName类型的数据来使用。即相当于是一个隐式的类型转换,可以在需要TypeName类型的地方隐式地将object转换为TypeName类型(通过调用Class重载的的类型操作符operator TypeName())。
例如 operator bool(),TypeName为bool的类型操作符。那么当调用if(object)的时候,object其实是需要一个bool类型,故编译器会隐式调用object.operator bool()。这样object就可以在需要bool类型数据的地方被当作bool类型的数据来使用。
#include <iostream>
#include <memory>
typedef std::shared_ptr<int> IntPtr;
void report(IntPtr ptr)
{
if (ptr) {
std::cout << "*ptr=" << *ptr << "\n";
} else {
std::cout << "ptr is not a valid pointer.\n";
}
}
int main()
{
IntPtr ptr;
report(ptr);
ptr = IntPtr(new int(7));
report(ptr);
}