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)
这是我的想法:
Y& operator.()( return *p; }不应该被称为obivous和直觉吗?*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.