运算符MyClass *()的含义是什么?

时间:2017-11-05 09:20:27

标签: c++

我有以下类定义:

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

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

2 个答案:

答案 0 :(得分:7)

这是一个类型转换运算符。它允许将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
}

至于为什么定义了转换,这是有争议的。坦率地说,我从来没有在野外见过这种情况,我无法猜测它为什么被定义。

答案 1 :(得分:1)

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

cppreference参考:

  

语法:

     

转换函数声明为非静态成员函数或   没有参数的成员函数模板,没有显式返回类型,   以及表格的名称:

operator conversion-type-id   (1) 

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

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

  4.