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

anu*_*g86 6 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?
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,为什么在执行时会有任何混淆x.f()

Y& operator.() { return *p; }
Run Code Online (Sandbox Code Playgroud)

这是我的想法:

  1. 运算符.()在x上被调用因此Y& operator.()( return *p; }不应该被称为obivous和直觉吗?
  2. 返回时*p指向Y类型的对象,因此Y::f()应该最终调用(不是X::f())

我在stroustup的解释中缺少什么?为什么不直截了当?

小智 14

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

  • 像这样的配置文件让我希望在个人资料页面上有一个"已验证"的指示符:) (15认同)
  • 这事有进一步更新吗?我在跟踪状态时遇到问题。 (5认同)