我有以下类定义:
struct MyClass {
int id;
operator MyClass* () { return this; }
};
我很困惑operator MyClass* ()
行在上面的代码中的作用。有什么想法吗?
答案 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)
声明参与所有隐式和显式转换的用户定义转换函数
- 醇>
声明用户定义的转换函数,该函数仅参与直接初始化和显式转换。