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