1. ホーム
  2. c++

[解決済み] なぜC++では'.'演算子をオーバーロードできないのですか?

2023-08-09 16:23:44

質問

C++で.演算子をオーバーロードして、オブジェクトへの参照を返すことができると非常に便利です。

をオーバーロードすることができます。 operator->operator* ではなく operator.

これには技術的な理由があるのでしょうか?

どのように解決するのですか?

参照 Bjarne Stroustrupの言葉です。 :

<ブロッククオート

演算子. (ドット) は原理的には -> と同じ手法でオーバーロードすることができます。 に使用されるのと同じ手法でオーバーロードできます。しかし、そうすると、次のような疑問が生じます。 をオーバーロードしているオブジェクトのための操作なのか、それとも. で参照されるオブジェクトのためのものなのか、それとも. 例えば

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?
}

この問題は、いくつかの方法で解決することができます。標準化当時は 標準化当時は、どの方法がベストなのか明らかではありませんでした。詳しくは を参照してください。 C++の設計と進化 .