2016-03-23 11 views
3

私はScott MeyersのEffective C++ 3rdを読んでいます。
項目3:有効なC++アイテム3では、static_cast <const TextBlock>(* this)の代わりにstatic_cast <const TextBlock&>(* this)を使用するのはなぜですか?

可能な限りconstを使用してください。

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

はなぜスコット・マイヤーズが static_cast<const TextBlock&>(*this)代わりの static_cast<const TextBlock>(*this)使用しない:constメンバ関数演算子を使用するには、[]、非constメンバ関数演算子[]は2つのキャスト操作を行うには?

+1

...それがコピーされるためですか? – Columbo

+1

静的\ _cast (\ * this)と静的\ _cast (\ * this)の違いの可能な複製](http://stackoverflow.com/questions/3802556/difference-between-static-castconst-athis-および静的キャストコンスタント) – anderas

答えて

2

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

関連する問題