問題タブ [reinterpret-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.

0 投票する
2 に答える
1878 参照

c++ - データの「シリアル化」、バイト順序、および受信側でのアラインメントのためのreinterpret_cast

POD構造体がAと言う場合、私はこれを行います:

受信側のリモートボックスが必ずしも同じハードウェアまたはOSであるとは限らない場合、これを安全に実行して「シリアル化を解除」できますか?


「結果」は常に有効ですか?C ++標準はPOD構造で述べており、reinterpret_castの結果は最初のメンバーを指す必要がありますが、受信側が別のプラットフォームであっても、実際のバイト順序も正しいことを意味しますか?

0 投票する
1 に答える
2609 参照

c++ - ここでreinterpret_castの代わりにstatic_castを使用することが重要なのはなぜですか?

レイモンド・チェンのブログ投稿の返信で

質問者が指摘した

レイモンド、派生クラスの基本クラスサブオブジェクトの位置はISO C ++ 2003標準(10-3、168ページ)に従って指定されていないため、C ++の例は正しくないと思います。また、基本クラスサブオブジェクトは常に次の場所にあると想定します。始まり。Cの例はC++でも問題ないので、私はそれに固執します。

レイモンドは答えた

[コードはこの仮定をしていません。そのため、reinterpret_castではなくstatic_castを使用することが重要です。試してみてください:OVERLAPPEDに仮想メソッドを追加して(vtableが前面に表示されるように)、コンパイラーの動作を観察します。-レイモンド]

彼のコメントを読んだ後、私は推測することができました。この例ではstatic_castを使用しても問題ありませんが、reinterpret_castは問題ありません。reinterpret_castはvtableを変換しないためです。私はそれを正しく理解していますか?
しかし、そこで(reinterpret_castではなく)Cスタイルのキャストを使用すると、それもうまくいかない可能性がありますか?

それを理解するために、より効果的なC++のキャストの説明を読み直しました。しかし、それについての答えはありませんでした。

0 投票する
2 に答える
188 参照

c++ - 再解釈されたポインタが正しいメモリ位置を指していない

Message.h でこれを取得したとします。

では、 in Message をtypemain.cppにキャストしました。ポイントは、レイアウトに従ってメモリにアクセスできることです。m_bufferHeaderHeader

Header* hdrと同じメモリ アドレスを指すと想定されMessage msgm_primitiveは と同じアドレスにあると想定されHeader* hdrm_transNumは です&m_primitive + 4

ただし、これは実際の値です。

m_primitive完全にランダムな場所をm_transNum指し、ガベージ値を取得しました! どうすれば起こりますか?reinterpret_cast異なるタイプのポインターにキャストすることにより、クラスのタイプに応じてレイアウトを変更することになっています。

また、コピーが返された場合、 の値はm_primitive100 になるm_transNumはずです。しかし、値は間違っています。memcpychar* contentmsg

0 投票する
2 に答える
33 参照

constants - 定数を変更する

nextを使って定数を変更できない理由を教えてください。

0 投票する
1 に答える
2093 参照

c++ - Cキャストを介して構造体の最初のフィールドにアクセスすると、厳密なエイリアシングに違反しますか?

このコードは厳密なエイリアシングに違反していますか?

より抽象的に言えば、プリミティブな読み取り/書き込み操作が正しい型である限り、異なる型間でキャストすることは合法ですか?

0 投票する
4 に答える
469 参照

c++ - 関係のない型の間で reinterpret_cast と virtual

次のコードが機能する理由を誰かが親切に説明してくれませんか? Visual Studio .NET 2008、Cygwin の g++、およびideone.comでテストしました。さらに重要なことは、それが有効かどうかを知りたいということです。ABは無関係なタイプであることに注意してください。

編集:@leftaroundaboutのコメントに従って、コードに次の変更を加えました

プログラムは次のメッセージを出力します。

基本的に、最初の仮想メソッドは、それが何と呼ばれるかに関係なく呼び出されます。

0 投票する
3 に答える
45819 参照

c++ - char * と unsigned char * の間で static_cast できないのはなぜですか?

どうやらコンパイラはそれらを無関係な型と見なしているため、reinterpret_cast必須です。なぜこれがルールなのですか?

0 投票する
2 に答える
665 参照

c++ - reinterpret_cast と STATUS_ACCESS_VIOLATION

C++ と関数を試しているときに、aを areinterpret_castに変換しようとしたところ、STATUS_ACCESS_VIOLATION 例外が発生しました。shortstring

私の理解では、アプリケーションのプロセスに割り当てられていないメモリを使用しようとしました。

このような禁止されたメモリ アクセスの試みにどのように注意すればよいでしょうか? 私の短い価値が含まれているこの作品だけを再解釈するにはどうすればよいでしょうか?

0 投票する
2 に答える
1824 参照

c++ - ARCを有効にしてreinterpret_castを使用する

ARC対応のObjective-Cプロジェクトにライブラリのヘッダーファイルをインクルードしました。

ライブラリがARCを有効にしてコンパイルされていないことは知っていますが、問題はライブラリのヘッダーファイル、特に次の行にあります。

このエラーが発生します:

このエラーを修正することは可能ですか?

ヘッダーファイル全体はここにあります:http://puu.sh/sTrH

0 投票する
1 に答える
500 参照

c++ - Strict aliasing and std::array vs C-style array

When compiling the following code with gcc 4.7 (g++-mp-4.7 (GCC) 4.7.0 built with MacPorts on OS X) I get seemingly contradictory results.

The compiler does not complain when I try to reinterpret and dereference a section of an std::array as an uint32_t but it does when using a C-style array.

Example code:

Compiler command is:

Why are they treated differently?