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
}
通过初始化的方式,直接初始化或者拷贝初始化,将一个类转化为另一个类。
原文链接: https://www.cnblogs.com/wanghao-boke/p/16352259.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/189893
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!