[英]C++ overloaded operator->() not being called?
谁能解释为什么没有从Foo *类型的指针调用Foo类的重载运算符->吗?
#include <iostream>
using namespace std;
class Foo {
public:
Foo * operator -> () {
cout << "calling Foo * operator -> ()\n";
return this;
}
int x;
};
void main() {
Foo f;
Foo * pF = &f;
pF->x; // Why is overloaded operator-> not being called here?
(pF->operator->())->x; // This works.
cout << "End test.\n";
}
为什么这里没有调用重载的operator->?
因为pF
是指针,而不是Foo
实例。 您对Foo
而不是Foo*
重载了operator->
。 您可以直接在f
上调用重载的operator->
。
f->x;
您不能为Foo*
或任何其他指针类型重载operator->
。
您为Foo
重载了它,而不是为Foo*
重载了(这是不可能的)。
这本来可以工作:
(f.operator->())->x;
或者,当然:
f->x;
能够使用这种短语法是重载的全部目的,不是吗? 尽管仅返回指向您在其上调用了该运算符的对象的指针是很令人困惑的。
您已经重载了类型为Foo
“指向”运算符,而不是类型为Foo*
。
class Foo {
public:
// Overload 'point-to' operator of 'Foo'
Foo * operator -> () {
cout << "calling Foo * operator -> ()\n";
return this;
}
int x;
};
用法示例:
Foo f;
f.operator->();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.