私のクラスで再帰的な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. Constオブジェクト、Constメンバー関数、およびC++での可変変数
- 2. シーケンス関数をfoldrから再帰関数に変更する
- 3. 再帰関数で変数を更新できません
- 4. グローバル変数を再帰関数の静的変数に置き換えます。
- 5. 再帰的JS関数をObj-Cに変換する
- 6. OCamlで再帰関数の静的変数を定義する
- 7. 再帰関数py3で変数が変更されました。
- 8. 再帰的ostream関数C++
- 9. 再帰的なC++関数
- 10. Pythonこの関数を再帰関数に変換します
- 11. 再帰的ツリーウォーキング関数を反復的に変換する
- 12. 再帰的なjavascript/ajax関数:関数内でグローバル変数にアクセスすることができません
- 13. 関数の変更constオブジェクト
- 14. トランスクリプトのバージョンを使用したJavascriptの変更再帰関数
- 15. 再帰関数付き10基数の基数変換器 - C
- 16. 再帰関数を末尾再帰に変換する
- 17. 再帰関数の変換
- 18. constメンバ関数のフィールドを一時的に変更する
- 19. 再帰関数によって使用されるグローバル変数
- 20. C++再帰関数無限ループ
- 21. PostgreSQL関数で再帰的クエリを使用する
- 22. forループを再帰関数に変更する
- 23. C#再帰関数
- 24. 再帰関数C++
- 25. 関数を再帰的にする
- 26. 関数を完全に再実装せずに再帰関数契約を変更しますか?
- 27. 動的変数をJQuery関数に使用できません
- 28. C++でTからconst Tに変換する関数
- 29. 再帰素数関数C++
- 30. C++可変関数
まず自分で試してみませんか?どのくらいの努力が必要ですか? – Nawaz
@Nawaz:「それは私のために働く」と「よく定義された行動」は区別が非常に難しい – Flexo
@awoodland:あなたはポイントがあります。しかしタイトルからは彼が試したこともないと思われます。そうでなければタイトルは* "これは私が....であればよく定義されているはずです"#* – Nawaz