問題タブ [mutable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C ++の静的可変メンバー変数?
C++ でクラス メンバー変数を として宣言できないのはなぜstatic mutable
ですか? 何かのようなもの
私にとって、そのような宣言を禁止する理由はありません。たとえば、グローバルなクラス全体の統計を維持するなどの理由で、(論理的に) const メソッドによって変更できる静的変数があると便利な場合があります。したがって、これは C++ の設計ミスのようなもので、不必要に複雑であるか、私にはわからない実用的または理論的な理由があるかのいずれかです。
scala - Scalaの可変メソッドパラメーター
単純な問題:読み取りメソッドを持つScalaでFilterInputStreamをサブクラス化しています:
読み取られるデータはbに入れられますが、パラメーターはScalaメソッドの「vals」であるため、これを適切にサブクラス化する方法がわかりません。読み取るデータにbを設定するにはどうすればよいですか?Java * InputStreamは、私にあまり選択肢を残しません。
java - これはClojureの可変状態の賢明なモナドですか?
私はClojureでモナドを実験していて、次のコードを思いつきました。ここで、モナドの値と状態のペアは、可変のClojuredeftypeオブジェクトで表されます。
オブジェクトは変更可能であるため、常に新しい結果オブジェクトを作成しなくても、モナディックコードを記述できるという利点があるように思われます。
しかし、私はモナドにかなり慣れていないので、知りたいです:
- この構成は意味がありますか?
- それは実際にモナドとして正しく機能しますか?
以下のコード:
scala - scala.collection.mutable.Map に要素を追加するための構文は何ですか?
scala.collection.mutable.Map に要素を追加するための構文は何ですか?
失敗した試みのいくつかを次に示します。
java - Javaで参照として文字列を取得する
だから私はJavaで可変文字列のコレクションを持つことができるようにしたい.
不変の文字列の機能を確認するために、次のテスト クラスがあります。
出力は次のとおりです。
これらの文字列を変更可能として保存するにはどうすればよいですか? String への参照を単純に含む StringObject クラスを持つことを考えていました。これは最良の選択肢ですか?
c++ - const オブジェクトへの変更可能なポインターをどのように定義しますか?
クラス外の定数 VARIANT 値へのポインターを含むクラスがありますが、このポインターを変更して、クラス自体の VARIANT メンバー オブジェクトを参照したい場合があります。
このクラスのほとんどのインスタンスは const になるため、ポインターを変更可能として宣言する必要があります。
Visual C++では、このコードは私が望むことをしているようです:
ただし、ミュータブルはポインタのプロパティであり、ポインティのプロパティではないため、これは正しい構文であると思います。
定数ポインターを定義する方法に似ています (const オブジェクトへのポインターではありません)。ただし、Visual C++ はこのバリアントを受け入れません。
警告 C4518: 'mutable': ストレージ クラスまたは型指定子が予期されていません。無視された
Visual C++ は正しいですか、それとも何か不足していますか? より標準に準拠した別のコンパイラが異なる動作をする可能性はありますか?
java - Spring セッター/ゲッターと可変変数
次のクラスがあることを提案しましょう
Spring または Hibernate Framework に変更可能なゲッターとセッターを使用し、カスタム コーディングに不変のセッターとゲッターを使用することは良い習慣ですか。私が恐れているのは次のことです。
myClass オブジェクト内の日付変数の値を変更しただけで、システムのバグの主な原因になる可能性があります。
私は正しいですか?Spring/Hibernate にも不変のゲッターとセッターを使用できますか?
c++ - ミューテックスは変更可能である必要がありますか?
これがスタイルの質問なのか、それとも難しいルールがあるのかわからない...
パブリックメソッドインターフェイスを可能な限り一定に保ちながら、オブジェクトスレッドを安全にしたい場合は、可変ミューテックスを使用する必要がありますか?一般に、これは優れたスタイルですか、それとも非constメソッドインターフェイスを優先する必要がありますか?あなたの見解を正当化してください。
constants - Dの論理定数
Dには2つのタイプの不変性があります。不変変数は不変であると宣言されたものであり、常に不変ですが、const変数は単にオブジェクトの読み取り専用バージョンです。
論理constは、関数がconstとしてマークされている場合ですが、1つ以上のメンバー変数への書き込みアクセスを許可します。これの典型的な使用法は、遅延評価です。たとえば、(C ++で)
ここでdeterminant()
は、ですが、const
変更することができ、それらが。としてマークされているためです。m_dirty
m_determinant
mutable
D const(FAQ)は、D2が提供する保証が弱いため、論理constをサポートしないと述べています。これは、並行プログラムの作成の妨げとなり、特定の最適化をより困難にします。
私は懸念を完全に理解していますが、論理定数が必要な場合はどうなりますか?
上記の場合をクラスで考えてみましょうMatrix
。ただし、キャッシュはありません(そして論理定数は必要ありません)。また、このクラスが私のコードベース全体で使用されており、ほとんどがconst参照を介してアクセスされていることを想像してみてください。
ここで、プロファイリングにより、determinant()
関数がコードのボトルネックであることが明らかになり、さらに、通常は値が変更されることはめったになく、繰り返しアクセスされます。つまり、上記のように、キャッシュは完全に最適化されます。
論理定数なしでそれを行うにはどうすればよいですか?コードベース全体に行き、const参照をnon-const参照に変更することは、オプションではありません(明らかな理由から)。
(もしあれば)どのようなオプションがありますか?
c++ - C++の「可変関数」の正しい代替手段
C ++のクラスでアルゴリズムをラップするときに、constの正確性に問題が生じることがよくあります。許可されていませんが、可変関数が欲しいと思います。次のようなクラスの実装方法を教えてもらえますか?
以下は私が書き たいコードです。
- run()関数は、データを変更するため、const関数であってはなりません。
- 関数get_result()は、データを返すため、(ユーザーに関する限り)定数関数である必要があります。
ただし、ユーザーがrun()を呼び出さずに結果を要求した場合は、get_result()関数でアルゴリズムを実行する必要があります。非const関数を呼び出すconst関数があるため、これはconstの正確性を損ないます。
上記のクラスをコンパイルすることができた唯一の方法は、次のいずれかです。
- run()をconstにし、m_dataとm_completedを可変にします。これは機能しますが、run()が明らかにデータを変更するため、概念的には間違っています。
- get_result()を定数関数にしないでください。これも間違っているように見えます。ユーザーは、この関数が単純な戻り値であり、したがって一定であると期待するからです。
- run()関数をget_result()const関数に入れ、データ変数を変更可能にします。
私の理解では、mutableキーワードはこれらのオプションの3番目用に設計されており、実装ではデータを変更する必要がありますが、ユーザーは単純な戻り値、したがってconst関数を合理的に期待しています。
ただし、ユーザーがデータを変更するタイミングを正確に選択できるようにするため、この最後のオプションは実行しません。ただし、run()の呼び出しを忘れる可能性があるため、run()を呼び出さずに結果を要求した場合は、アルゴリズムを強制したいと思います。run()を可変にしたいように感じますが、許可されていません。
そのようなクラスを書く正しい方法は何ですか?