运算符 MyClass*() 是什么意思

What does operator MyClass*() mean?

本文关键字:是什么 意思 MyClass 运算符      更新时间:2023-10-16

我有以下类定义:

struct MyClass { 
   int id;
   operator MyClass* () { return this; }
};

我对上面的代码中operator MyClass* ()行的作用感到困惑。有什么想法吗?

它是一个

类型转换运算符。它允许将类型 MyClass 的对象隐式转换为指针,而无需应用 address-of 运算符。

这里有一个小例子来说明:

void foo(MyClass *pm) {
  // Use pm
}
int main() {
  MyClass m;
  foo(m); // Calls foo with m converted to its address by the operator
  foo(&m); // Explicitly obtains the address of m
}

至于为什么要定义转换,这是值得商榷的。坦率地说,我从未在野外见过这种情况,我也无法猜测为什么会这样定义它。

它是一种用户定义的转换,允许从类类型到另一种类型的隐式或显式转换。

CPP 首选项参考:

语法:

转换函数像非静态成员函数一样声明,或者 没有参数、没有显式返回类型的成员函数模板, 并带有表单名称:

operator conversion-type-id   (1) 
explicit operator conversion-type-id  (2) (since C++11)
  1. 声明一个用户定义的转换函数,该函数参与所有隐式和显式转换

  2. 声明一个用户定义的转换函数,该函数仅参与直接初始化和显式转换。