运算符 MyClass*() 是什么意思
What does operator MyClass*() mean?
我有以下类定义:
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)
声明一个用户定义的转换函数,该函数参与所有隐式和显式转换
声明一个用户定义的转换函数,该函数仅参与直接初始化和显式转换。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思