C++ 无法重载点'';c+中的运算符+;

C++ 无法重载点'';c+中的运算符+;,c++,operator-overloading,C++,Operator Overloading,如果允许对“.”进行运算符重载,我很难理解Stroustrup对一个人必须面对的困难的解释 参见比亚恩·斯特劳斯特鲁普的这段话: 接线员。(dot)原则上可以使用与->相同的技术重载。但是,这样做可能会导致关于操作是否用于对象重载的问题。或所指的对象。例如: 在上面的示例中,为什么在执行x.f()时会出现任何混乱 Y& operator.() { return *p; } 以下是我的想法: 操作符。()在x上被调用,因此应该调用Y&操作符。((return*p;}不是很明显和直观吗 在

如果允许对“.”进行运算符重载,我很难理解Stroustrup对一个人必须面对的困难的解释

参见比亚恩·斯特劳斯特鲁普的这段话:

接线员。(dot)原则上可以使用与->相同的技术重载。但是,这样做可能会导致关于操作是否用于对象重载的问题。或所指的对象。例如:

在上面的示例中,为什么在执行
x.f()
时会出现任何混乱

Y& operator.() { return *p; }
以下是我的想法:

  • 操作符。()在x上被调用,因此应该调用
    Y&操作符。((return*p;}
    不是很明显和直观吗
  • 在返回
    *p
    时,它指向类型为Y的对象,因此最后应该调用
    Y::f()
    (而不是
    X::f()

  • Stroustup的解释中我遗漏了什么?为什么不直截了当?

    已经有了一些进展:。由于一些技术问题,这在C++17中不会出现,但我希望在C++20中看到。

    “因此最后应该调用
    Y::f()
    ”,但阅读该代码的人不会感到困惑吗?通常是
    x.f()
    会调用
    x
    f
    成员,但在这种情况下不会发生。@ScottHunter好吧,如果这个例子来自Stroustrup,应该是为了说明混淆,是不是应该混淆:)?这讨论了同样的问题。@AlexD:正是我的观点。重载意味着混乱。但是如果stroustup说它不是直截了当的,那么它一定是某种东西。因此question@AlexD:不,你不能。如果
    x
    有一个名为
    f()
    的函数,您将无法使用
    x->f()
    语法调用该函数。正是这些配置文件让我希望在配置文件页面上有一个“已验证”的指示器:)对此有任何更新吗?我跟踪状态时遇到问题。
    Y& operator.() { return *p; }