クラス内のメンバ変数であり、そのクラスのオブジェクトがconstであってもメンバ関数を使用してインクリメントすることができるイテレータを宣言する方法はありますか?C++で揮発性イテレータを宣言する方法
答えて
これは、「可変」キーワードを使用した場合に発生します。
class X
{
public:
bool GetFlag() const
{
m_accessCount++;
return m_flag;
}
private:
bool m_flag;
mutable int m_accessCount;
};
揮発性ではなく可変であることを宣言します。
メンバーとしてイテレータが必要ですか?イテレータには能力があります:イテレータは無効になります。これは設計問題の小さな兆候です。
メンバー関数を使用してリストを反復したいとします。 getFirstとgetNextのようなものですが、そのために私は可変反復子を宣言したいので、constオブジェクトを反復処理することができます。 –
イテレータのSTL-設計に進んでください。それはC++コミュニティで受け入れられ、他の開発者を驚かせることはありません。つまり、イテレータはクラスの一部ではありません。 –
@tmpforspam:メンバ関数の呼び出し時にオブジェクトの動作が変更された場合、const関数ではありません。 – xtofl
using namespace std;
class tmptest
{
public:
void getNextItr()const
{
m_listItr = m_list.begin();
m_listItr++;
}
list<string> m_list;
mutable list<string>::const_iterator m_listItr;
};
const_iterator
と一緒に変更できます。 mutableとvolatileを思い出させてくれてありがとう。 私は揮発性が混乱して混乱してしまった。再度、感謝します!
これは深刻な契約違反です: 'getNextItr()'関数を呼び出した後、クライアントコードはオブジェクトがまだ同じであると仮定しますが、そうではありません。 – xtofl
- 1. C:関数への揮発性ポインタを宣言する
- 2. 揮発性のconst、揮発性レジスタ、C++での揮発性の静的
- 3. C#で揮発性とThread.MemoryBarrier
- 4. 揮発性宣言の代替としての同期
- 5. C#の非揮発性オブジェクト
- 6. C++の揮発性クラスメンバー
- 7. C中の揮発性
- 8. C#とCの揮発性の違い
- 9. は、揮発性
- 10. Javaでイテレータを宣言する
- 11. C++コンストラクタ内で揮発性のポインタとしてこれを作る方法
- 12. C++揮発物、不揮発メンバー
- 13. 揮発性変数
- 14. スカラ:不揮発性
- 15. 揮発性同等
- 16. 揮発性要素の配列を実装する方法
- 17. スカラー型を揮発性にする方法
- 18. 揮発性として宣言することはできません、この権利は?:ある
- 19. C++テンプレートクラスの宣言方法
- 20. 例逆アセンブリで揮発性を示すCコード?
- 21. 揮発性の変数をキャストする
- 22. シングルトンが揮発性である場合
- 23. 揮発性のconstポインタ
- 24. 揮発性EquivalenceClassにはsortref
- 25. ビュー対揮発性テーブル?
- 26. スレッドセーフ(揮発性なし)
- 27. アクセシビリティの揮発性変数
- 28. は揮発性の変数ですか?
- 29. 揮発性コピーコンストラクタとは何ですか?
- 30. .Net:揮発性の32ビットと不揮発性の64ビットおよびスレッドの安全性。 64ビットを処理する最善の方法は何ですか?
これは整数でも動作しますが、リストやマップのイテレータであれば、constオブジェクトでは機能しません。 iter = list.begin()に "="演算子がありませんとエラーがスローされます。 –
@tmpforspam:あなたが得ている完全なエラーメッセージを見ることができないと、 "list"もconstで、あなたがconst_iteratorを使用しているように思えます。 –