我很难理解stroustrup的解释,因为如果运营商超载,那么必须面对哪些困难。'被允许了。
请参阅Bjarne Stroustrup的这句话:
运营商。 (dot)原则上可以使用与 - >相同的技术重载。但是,这样做会导致对操作是否意味着对象重载的问题。或者提到的对象。例如:
class Y {
public:
void f();
// ...
};
class X { // assume that you can overload .
Y* p;
Y& operator.() { return *p; }
void f();
// ...
};
void g(X& x)
{
x.f(); // X::f or Y::f or error?
}
在上面的示例中,为什么在执行x.f()
时会出现混淆?
Y& operator.() { return *p; }
以下是我的想法:
Y& operator.()( return *p; }
应该被调用的直观和直观吗?*p
,因此最终应调用Y::f()
(不是X::f()
)我在stroustup的解释中缺少什么?为什么不直截了当?
答案 0 :(得分:11)
取得了一些进展:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4477.pdf。由于一些技术问题,这不会出现在C ++ 17中,但我希望看到它适用于C ++ 20。