10

別のオブジェクトへの定数参照パラメーターを取るメンバー関数があります。メンバー関数内で簡単に使用するために、このパラメーターを const_cast したいと考えています。この目的のために、次のコードのどれが優れていますか?:

void AClass::AMember(const BClass & _BObject)
{
    // FORM #1 - Cast as an object:
    BClass BObject = const_cast<BClass &>(_BObject);
    // ...
}

void AClass::AMember(const BClass & _BObject)
{
    // FORM #2 - Cast as a reference:
    BClass & BObject = const_cast<BClass &>(_BObject);
    // ...
}

この二つの形を比較していただけますか。速度とメモリ使用量の基準でどちらが優れていますか?

4

2 に答える 2

17

最初のバージョンは、オブジェクトのコピーを作成します。2番目のバージョンはそうではありません。したがって、コピーを作成しない限り、2番目のバージョンの方が高速になります。

ちなみに、アンダースコアで始まり大文字が続くすべての識別子は、コンパイラで使用するために予約されています。のような変数名は使用しないでください_BObject

于 2011-11-04T02:36:10.430 に答える
11

_BObject最初のものは、constnessを捨てて、後でコンストラクターへの定数参照として渡しBClass、コピーを作成するため、意味がありませんBObject。2つ目は、それが意味することを実行します。つまり、不変性を取り除き、元のオブジェクトへの参照を保持します。だから私に言わせれば、2番目の方がいいです。const_castただし、それが常に安全であるとは限らないことに注意してください。

于 2011-11-04T02:36:39.917 に答える