无法超载Dot'。' c ++中的运算符

时间:2017-02-12 02:34:47

标签: c++ operator-overloading

我很难理解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; }

以下是我的想法:

  1. 运算符。()在x上被调用因此不应该是Y& operator.()( return *p; }应该被调用的直观和直观吗?
  2. 返回指向Y类型对象的*p,因此最终应调用Y::f()(不是X::f()
  3. 我在stroustup的解释中缺少什么?为什么不直截了当?

1 个答案:

答案 0 :(得分:11)

取得了一些进展:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4477.pdf。由于一些技术问题,这不会出现在C ++ 17中,但我希望看到它适用于C ++ 20。

相关问题