operator
operator 是 C++ 一个重载操作符的关键字,但是 operator 除了可以重载操作符以外,还可以用做对两个不同类的转换。
具体使用如下:
#include<iostream> using namespace std; struct X { X(){ num = 10; } // implicit conversion operator int() { return 7; } // explicit conversion explicit operator int*() { return # // return nullptr; } // it's ok through typedef using arr_t = int[3]; operator arr_t*() const { return nullptr; } // Error: array operator not allowed in conversion-type-id // operator int(*)[3]() const { return nullptr; } // Error: conversion to array not allowed in any case // operator arr_t() const int num; arr_t* arr; }; struct To { To() = default; To(const struct From&) { cout << "const struct From&" << endl; } }; struct From { operator To() const { cout << "operator To() in class From" << endl; return To(); } }; int main() { X x; int n = static_cast<int>(x); int m = n; cout << "n : " << n << endl; cout << "m : " << m << endl; int *p = static_cast<int*> (x); cout << "*p : " << *p << endl; int (*pa)[3] = x; // ? how to reurn a pointer that is a type of int[3] From f; To t1(f); // direct-initialization: calls the constructor To t3 = static_cast<To> (f); // direct-initialization: calls the constructor const To& r = f; // reference-initialization }
通过初始化的方式,直接初始化或者拷贝初始化,将一个类转化为另一个类。