問題タブ [const-cast]
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++ - const_castは安全ですか?
に関する情報があまり見つかりませんconst_cast
。私が(Stack Overflowで)見つけた唯一の情報は次のとおりです。
は
const_cast<>()
、変数のconst(ness)(またはvolatile-ness)を追加/削除するために使用されます。
これは私を緊張させます。const_cast
予期しない動作を引き起こす可能性がありますか?もしそうなら、何ですか?
または、いつ使用しても大丈夫const_cast
ですか?
c++ - const_cast は実際のコードの放出を引き起こしますか?
const_castは、コンパイラーに「うめき声をやめ、これを非 const ポインターとして扱う」ように伝える方法にすぎないというのは本当ですか? const_cast自体を実際のマシンコードに変換する場合はありますか?
c++ - テンプレートの const_cast。unconst 修飾子はありますか?
次のようなテンプレート クラスがあります。
次のように、定数型 T を持つクラスを使用したい場合があります。
しかし、使用してデータを変更したいconst_cast<MyObject*>data
(理由は重要ではありませんMyClass
が、参照カウントをデータ自体に保持する参照カウントスマートポインタークラスです。MyObject
カウントを含む何らかの型から派生しています。データは変更されるべきではありませんが、 count は、スマート ポインターによって変更する必要があります)。
から const-ness を削除する方法はありT
ますか? 架空のコード:
?
c++ - const オブジェクトへの読み取り専用アクセスに const_cast を使用することは許可されていますか?
C++ には、配列への読み取り専用アクセスのみを必要とする関数がありますが、const 以外のポインターを受け取ると誤って宣言されています。
const 配列に対してそれを呼び出す必要があります。
これは未定義の動作になりますか?もしそうなら - プログラムはいつUBに実行されますか - const_castを実行して関数を呼び出すとき、または配列にアクセスするときは?
c++ - Cスタイル、再解釈、およびconstキャストでの説明が必要
Cスタイルのキャスト(推奨されていません)はreinterpret_castsに過ぎないと思いますか?後者を使用すると、視覚的に印象的で、厄介なキャストを探すときに簡単に検索できるため、Cスタイルのキャストよりもお勧めしますか?
const_castを使用してconstをキャストし、元々constオブジェクトに書き込むことが定義されていない場合、const_castの目的は何ですか?
注: Bjarneは、キャスト操作が安全ではないことを正しく非難し、「醜い操作は醜い構文形式である必要があります」とさえ述べていることを知っています。したがって、C++でのキャスト演算子の冗長性。だから私はそれらの使用を最小限に抑えるようにします。約束。:)
c++ - const_cast<> の正しい使い方
const_cast<>()
一般的なルールとして、 (ほとんどの場合) 設計上の欠陥が明らかになるため、C++ コードで使用することは悪い習慣と見なされることがよくあります。
私はこれに完全に同意しますが、使用しているケースは何ですか?唯一の解決策const_cast<>()
は何ですか?
皆さんが知っている/遭遇した例をいくつか教えてください。
どうもありがとうございました。
c++ - コピー コンストラクターでの const_cast の意味は?
したがって、実際に書き込みを行うクラスへのポインターを所有する出力ストリーム クラスがあり、特定の値をユーザーに透過的にバインドできるように、関数から初期化されたインスタンスを返すことができるコピー コンストラクターが必要です。合理的なコピー セマンティクスを実現するために、コピーされたオブジェクトのライター ポインターをクリアし、それを閉じてコピー中に使用できないようにしたいと考えています。
非 const コピー コンストラクター a-la を使用すると、問題なく実行できます。
しかし、関数呼び出しによって返された一時から直接割り当てることができるようにしたい:
コピー コンストラクターは const である必要があります。したがって、コピー コンストラクターで const_cast を使用することの意味に興味があります。他の参照を非 const ポインターにキャストし、言及したライター ポインターをクリアします。const_cast は一般的に悪と見なされていることは知っていますが、この場合は機能しますか? 関数呼び出しから返された一時オブジェクトとどのように相互作用するのか、特に興味があります。
あるいは、コピー コンストラクターにアクセスしたい作成関数は 4 つしかありません。それらの関数 (戻り値を含む) のみが使用できるようにスコープを設定する合理的な方法があれば、それを好むでしょう。
c++ - 配列を定義するときに const_cast は受け入れられますか?
静的な const 配列クラス メンバー (SDL_Surfaces への const ポインターですが、それは無関係です) があり、それを設定するためにループする必要があります。ループが終わったときの const_cast は別として、これは悪い習慣だと聞いていますが、どうすればこれを行うことができますか?
編集:私がやらない理由...
この配列の値を取得するには、別の配列から読み取り、別の配列のそれぞれの値に対して関数を実行する必要があるということです。ずっとループしたら、この配列を再び変更することはありません。
EDIT 2: ここで概念的な間違いを犯したと思います。私がやろうとしていたconstnessを削除する代わりに、const_castを何らかの方法でconstにすることは可能ですか? そうでない場合、私はこれを尋ねる少しばかげていました:D