任何人都可以解释为什么重载运算符 - >对于类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";
}
答案 0 :(得分:6)
为什么重载运算符 - >;没被叫到这里?
因为pF
是指针,而不是Foo
实例。您为operator->
而非Foo
重叠了Foo*
。您可以直接在operator->
上调用重载的f
。
f->x;
您可能不会为operator->
或任何其他指针类型重载Foo*
。
答案 1 :(得分:3)
您为Foo
重叠了它,而不是Foo*
(这是不可能的)。
这会奏效:
(f.operator->())->x;
或者,当然:
f->x;
能够使用那么短的语法是重载的全部目的,不是吗?虽然只是返回一个指向同一个对象的指针很困惑,但是你调用了操作符。
答案 2 :(得分:2)
你已超载&#34;指向&#34; 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->();