0

OneCell私は、ここで定義と呼ばれるテンプレートクラスを持っています:

template <class T>
class OneCell
{
.....
}

OneCellここにからTまでのキャスト演算子があります

operator T() const
{
    getterCount++;
    return value;
}

ご覧のとおり、このメソッドで変数をインクリメントしたいのですが、キーワードが原因でエラーが発生しますconst

一方、このキーワードを削除すると、キャストがまったく機能しなくなります。

私に何ができる?

ありがとう、そして私の貧弱な英語について申し訳ありません。

4

2 に答える 2

5

実際operator T() constにはconst-member関数であり、その内部でthisポインターがconstオブジェクトを参照し、それによってgetterCount constも作成されます。

getterCount解決策は、以下に示すように、可変として宣言することです。

mutable size_t getterCount;

constメンバー関数でインクリメントできるようになりました。つまり、オブジェクトが次getterCountの場合でもインクリメントできます。const

void f(OneCell const & cell)
{
    //incrementing getterCount!
    ++cell.getterCount; //ok, even though cell is const!
}
于 2012-06-14T17:10:50.090 に答える
3

ご覧のとおり、このメソッドで変数をインクリメントしたいのですが、キーワードconstが原因でエラーが発生します。一方、このキーワードを削除すると、キャストがまったく機能しなくなります。

動作しますが、の可変インスタンスでのみ機能しますOneCell

私に何ができる?

論理定数ではなくビット単位mutableの定数を変更すると仮定して、移動します。

mutable int getterCount;
于 2012-06-14T17:10:37.697 に答える