私のクラスで再帰的なconst関数を持つことができますか?可変関数を変更する限り、const関数をC++で再帰的に使用できますか?
0
A
答えて
6
はい。 const
は常にconst
関数を呼び出すことができます。あなたは、それが意味を成すために変数を変更する必要はありません。たとえば、参照によって再帰関数に渡し、あなたの状態のものを修正することができます。 (または静的変数、非メンバー、またはconst以外のものへのポインタまたは非const参照を返すその他の関数)
最小の「有用な」例(他の答えに対するflowntのコメントに触発されています)リンクされたリストを横断する。
:あなたが再書き込みsum()
によって、あなたの問題に応じて、結果に対する基準を使用してもを回避することができます
#include <memory>
#include <iostream>
class Item {
public:
Item(const int& in, Item *next=NULL) : value(in), next(next) {}
void sum(int& result) const {
result += value;
if (next.get())
next->sum(result);
}
private:
int value;
std::auto_ptr<Item> next;
};
int main() {
Item i(5, new Item(10, new Item(20)));
int result = 0;
i.sum(result);
std::cout << result << std::endl;
}
(再帰がかかわらず、通常、リンクリストのトラバースを行うための素晴らしい方法ではありません)
int sum() const {
return value + (next.get() ? next->sum() : 0);
}
5
関連する問題
- 1. OCamlで再帰関数の静的変数を定義する
- 2. 再帰的なjavascript/ajax関数:関数内でグローバル変数にアクセスすることができません
- 3. 関数の変更constオブジェクト
- 4. 再帰関数付き10基数の基数変換器 - C
- 5. 再帰関数を末尾再帰に変換する
- 6. 再帰関数によって使用されるグローバル変数
- 7. forループを再帰関数に変更する
- 8. 再帰関数C++
- 9. 関数を完全に再実装せずに再帰関数契約を変更しますか?
- 10. 動的変数をJQuery関数に使用できません
- 11. ローカル変数でカウントする再帰関数
- 12. どのように再帰関数をJavaの反復関数に変換できますか?
- 13. document()関数でXSL変数を使用できますか?
- 14. なぜローカルconst変数をポインタキャストで変更できますか?Cでグローバルconst変数を変更できないのはなぜですか?
- 15. C++静的変数を使用する継承メンバ関数
- 16. 再帰的サイン関数
- 17. 匿名関数/再帰C#
- 18. 再帰関数で変数が共有される
- 19. どのように再帰的にC++ 11で可変的なテンプレート引数を持つvariadic関数パラメータを取得するのですか?
- 20. 目的関数Cの変数に変数を渡す
- 21. C++では、可変長のタプルを変更する関数を持つことができますか?
- 22. iPhoneでC open(const char * name、int flag)関数を使用できますか?
- 23. constメンバ関数がメンバ配列を変更できないようにする
- 24. Python3で再帰関数の中でprint()を使用する
- 25. 再帰関数のグローバル変数をゼロに保つには?
- 26. 簡単な質問:非静的関数がCで静的変数を変更することができ++
- 27. 目的関数cでasin()関数を使用する方法
- 28. Jquery/javascriptを使用して再帰関数をループ関数に変換する方法
- 29. 再帰関数
- 30. 再帰関数
まず自分で試してみませんか?どのくらいの努力が必要ですか? – Nawaz
@Nawaz:「それは私のために働く」と「よく定義された行動」は区別が非常に難しい – Flexo
@awoodland:あなたはポイントがあります。しかしタイトルからは彼が試したこともないと思われます。そうでなければタイトルは* "これは私が....であればよく定義されているはずです"#* – Nawaz