4

Scott Meyers の『Effective C++ 3rd』を読んでいます。
項目 3:

可能な限り const を使用してください。const メンバ関数 operator[] を使用するには、非 const メンバ関数 operator[] で 2 つのキャスト操作を行う必要があります。

const_cast<char&>(
  static_cast<const TextBlock&>(*this)
         [position]
)

static_cast<const TextBlock&>(*this)Scott Meyers がの代わりに使用するのはなぜstatic_cast<const TextBlock>(*this)ですか?

4

1 に答える 1

3

static_cast<const TextBlock>(*this)からコピーされる一時オブジェクトを作成します*this。そして、そのoperator[]上で呼び出されchar&、非 const メンバ関数の外に出ると、返されたものがぶら下がりますoperator[]。その逆参照は UB につながることに注意してください。

于 2016-03-23T08:41:50.553 に答える