0

これは、Effective C++ 2nd edition scott meyers (page 70) の項目 16 からのものです。

著者は、基本クラスの operator = が次のように呼び出されると、あまり説明せずに書いています。

Base::operator=(rhs);

一部のコンパイラは (間違ってはいますが) コンパイラによって生成された場合はこれを拒否しますoperator =(項目45 を参照)。

static_cast<base&>(*this) = rhs;

項目 45 で、基本クラスoperator =がプライベートの場合、派生クラス=にはそれを呼び出す権利がないと述べています。

しかし、元の質問では、コンパイラーによって生成されたため、コンパイラーはそれを拒否していました(公開する必要があります)

これに関するヘルプ(リンク)は役に立ちます。(これらのタイプの質問をグーグルで検索するのは非常に困難です)

4

1 に答える 1

3

しかし、元の質問では、コンパイラーによって生成されたため、コンパイラーはそれを拒否していました(公開する必要があります)

多分私はあなたが何を望んでいるのか理解しています。

コンパイラで生成された代入演算子がパブリックになります。しかし、項目 16 はアクセス レベルに関するものではありません。これstatic_cast<base&>(*this)は壊れたコンパイラの回避策です。項目 16 で、Scott Meyers は、基本クラス代入演算子がコンパイラーによって生成されるときに回避策が必要になる可能性があると述べています。ところで、第 2 版が出てから多くの変更がありました。第 3 版では、回避策については触れられていません。

民間委託事業者について 項目45は、基本クラスの代入演算子がプライベートにされた場合、コンパイラは派生クラスの代入演算子を生成できないことを示しています。これは、コンパイラが生成した代入演算子が基本クラスの代入演算子に依存しているためです。その場合、派生クラスの代入演算子を手動で記述するか、派生クラスを代入演算子なしで残す必要があります。

于 2011-04-24T18:58:47.383 に答える