問題タブ [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 を使用して定数変数を変更できますか?
出力は次のとおりです。
*pia
ia
アドレスは同じですが、値が異なります。私の目的はconst_cast
、定数値を変更するために使用することですが、結果として機能しないことが示されています。
誰かが理由を知っていますか?
c++ - ポインター (T*) を 2 つの定数 (T const * const) ポインターにキャストまたは変換する
C++
まだ2ポインターではないconst
ポインター(例:T const * const
)を暗黙的または明示的にキャストしたり、何か(関数など)を介して処理したり、そうでなければ変換したりしてT const * const
、初期化に使用することなく、または使用する前にを生成できるかどうかを知りたいとして宣言されている変数T const * const
。これどうやってするの?
T*
から始めれば、1 つconst_cast
(キャストが一度に 1 つしかキャストできない場合は 2 つ) で十分だと思いましたconst
が、明らかにそうではありません。T const * const
コード内の多くの変数は、キャストまたは関数からの戻りによる別の失敗した試みを示しています。すべてのキャストで、末尾にconst
. (const
の左側を*
先頭const
、 の右側を*
末尾と呼びconst
ます。) キャストが失敗したため、const
スルー直接初期化を強制しようとして失敗しました。これは でコンパイルされましたVC11
。stack-crooked.com の g++は、論理的に同等のコンソール出力を提供しますが、名前は異なりますtypeid(/*...*/).name()
.
期待される結果と実際の結果、および質問:
質問番号は、同じ番号のa#
変数に対応しています。
- 期待通りの結果が得られました
int *
- 期待通りの結果が得られました
int const *
- 期待さ
int* const
れていましたが、得られましたint*
。はconst_cast
その末尾のconst
引数を無視しましたか?その理由は? 戻り値は引数と同じ定数と型であるため、キャストは実行されましたか? - 期待さ
int const * const
れていましたが、得られましたint const*
。はconst_cast
その末尾のconst
引数を無視しましたか?その理由は? - 引数の先頭
const_cast<int const * const>
に既に. 予想される。を得た。はその末尾の引数を無視しましたか?その理由は?const
a4
const
int const * const
int const*
const_cast
const
- 予想される
int const * const
。を得int const*
た。明示的なキャストが引き続き末尾を除外するのはなぜconst
ですか? - 予想される
int const * const
。を得int const*
た。static_cast
末尾の を除外するのはなぜconst
ですか? - 予想される
int const * const
。を得int const*
た。reinterpret_cast
末尾の を除外するのはなぜconst
ですか? - 予想される
int const * const
。を得int const*
た。関数の戻り値を初期化しても、結果int const * const
の末尾が除外されるのはなぜですか?const
- 予想される
int const * const
。デバッガーint const*
からではなく、コンソール出力から取得しました。a10
として明示的に宣言されてint const * const
いるのに、なぜtypeid().name()
末尾の const を除外するのでしょうか?operator==
では1
、なぜtypeid()
それ自体 (名前だけでなく) が のa10
それと同等なのa4
ですか? VC11 デバッガーはa10
、 のタイプを としてリストしますint const * const
。typeid()
なぜ と のものと違うのtypeid().name()
ですか? どちらが正しいですか? - 変数名
a11
は「all」に似ているので省略。 - 明示的に宣言された に初期化されているため、そうであると予想
a12
していました。 譲りますので、まだまだです。コンソール出力とデバッガーの両方から取得しました。期待される結果と異なるのはなぜですか?int const * const
a10
int const * const
operator==
1
typeid()
int const*
int const*
すべてのキャスト、関数の戻り値、および初期化は、一度に 1 つのキャストのみに制限さconst
れていますか? const
彼らがキャストできるのはリーディングだけですか?
c++ - const_cast の使い方
Student
クラスに次のように定義されたプライベート変数があります。
のコピーコンストラクターを作成しようとしていますStudent
が、これを行うには constness をキャストする必要があります。残念ながら使い方がわかりませんstd::const_cast
。
これは、コピーコンストラクターでやろうとしていることです:
それは機能しません...構文がわかりません。
c++ - 「ポインタ型へのポインタ」をconstに変換するには?
次のコードで
私はこれを得る:
理由がわかりません。test
にサイレントキャストできないのはなぜconst double**
ですか? なぜ明示的に行う必要があるのですか?そんなこと知ってる
私のコードは正しくなりますが、これは不要だと思います。
私が見逃しているconstに関するいくつかの重要な概念はありますか?
c++ - const_cast テンプレート パラメータに & が存在することは何を意味しますか
私は次の例を調べていました
&
そして、上記のテンプレートパラメータータイプが何を意味するのか、なぜそれがないと機能しないの&
かを知りたかったのです。
アップデート:
私の質問を言い換えさせてください。私はその参照を理解していますが、それはどの変数を参照していますか? たとえば、ここでは、ポインターの場合、元の (キャストされていない) ポインターを参照すると述べています。非ポインター型の場合に何を参照するのb
か、参照として宣言されていないときにどのように参照できるのかを知りたいですか?
c++ - C++ での const_cast の動作
これが私の問題です、問題はコメントにあります
誰がその理由を教えてくれますか? また、これらの問題を説明する書籍もありますか? ありがとう!
c++ - const char* を QString に変換します
タイプの関数の出力を使用するconst char*
必要があり、それを に変換する必要がありQString
ます。
注: その関数内では、これらは、const char*
はどこ_foo
ですかstd::string
。
次のコード行を使用しようとしましたが、常に空の文字列になります (実際には空ではありませんが、改行文字のみが含まれ、他のすべての文字は無視されます)。