問題タブ [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 投票する
3 に答える
6154 参照

c++ - C++スタイルのキャストを使用してVoid*からTYPE*​​にキャストします:static_castまたはreinterpret_cast

したがって、Void*からType*に、またはType*からVoid*に変換する場合は、次を使用する必要があります。

また

私にはstatic_castの方が正しいように見えますが、両方が同じ目的で使用されているのを見てきました。また、変換の方向も重要です。つまり、私はまだstatic_castを次の目的で使用する必要があります:

C ++スタイルのキャストに関する他の質問を読みましたが、このシナリオの正しい方法がまだわかりません(static_castだと思います)

0 投票する
6 に答える
3306 参照

c++ - より小さいサイズの配列への C++ キャスト

これは、C++ 言語のさまざまな癖に関する興味深い質問です。ポイントの配列を四角形の角で埋めることになっている関数のペアがあります。それには 2 つのオーバーロードがあります。1 つは を受け取り、Point[5]もう 1 つは を受け取りますPoint[4]。5 ポイント バージョンは閉じた多角形を参照しますが、4 ポイント バージョンは 4 つのコーナー、ピリオドだけが必要な場合です。

明らかに、ここには作業の重複があるので、4 ポイント バージョンを使用して 5 ポイント バージョンの最初の 4 ポイントを入力できるようにしたいので、そのコードは複製しません。(重複するほどではありませんが、コードをコピーして貼り付けるたびにひどいアレルギー反応を起こすので、それは避けたいと思います。)

T[m]問題は、C++ はa をT[n]whereに変換するという考えを気にしていないようですn < mstatic_cast何らかの理由でタイプに互換性がないと考えているようです。reinterpret_castもちろんうまく処理できますが、危険な動物であり、原則として、可能な限り避けたほうがよいでしょう。

だから私の質問は、配列タイプが同じであるサイズの配列をより小さなサイズの配列にキャストするタイプセーフな方法はありますか?

[編集] コード、はい。パラメーターは実際には単なるポインターではなく配列への参照であるため、コンパイラーは型の違いを認識していることを言及する必要がありました。

[Edit2] 参照渡し配列を渡すポイントは、呼び出し元が正しい「出力パラメーター」を渡していることを少なくとも漠然と確信できるようにすることです。

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

c++ - C++ reinterpret_cast

この単純なコードが機能しない理由がわかりません:

reinterpret_castが機能しない理由を誰かに教えてもらえますか?

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

c++ - reinterpret_cast に関する質問

私は次のコードを持っています

出力は次のとおりです: 7648 reinterpret_cast について説明してください

0 投票する
7 に答える
14740 参照

c++ - reinterpret_castキャストコスト

私の理解では、C ++ reinterpret_castとCポインターキャストは単なるコンパイル時の機能であり、パフォーマンスコストはまったくありません。

これは本当ですか?

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

c++ - 厳密なエイリアシングルールに違反しているキャスト

unsigned long *を受け取る関数があり、unsigned int *を受け取る外部ライブラリに渡す必要があります。このプラットフォームでは、unsigned int/longは同じサイズです。

これにより、厳密なエイリアシングルールに違反しているという警告が生成されます。回避策はありますか?

ありがとうございました

編集:明確ではないことをお詫び申し上げます。コードはアトミックアップデートであるため、ライブラリを回って保存することはできません。アセンブリにドロップダウンすることもできますが、C++でこれを実行したいと思います。

0 投票する
5 に答える
538 参照

c++ - 構造体の作成時に変更された Class Private メンバー (C++)

私はC++のいくつかのコードを調べていました。reinterpret_cast演算子の概念に出くわした場所。

編集1:

クラスのプライベート メンバーへのアクセスはお勧めできません。 しかし、状況によっては、先に進んでそれらにアクセスする必要があります。 私の概念を明確にするために、この質問を出しました。

私が参照した例では、クラスのプライベート メンバーは、同じ変数を持つ構造体を作成するだけでアクセスされ、後で reinterpret_cast演算子を実装することによって変更されます。

reinterpret_cast演算子の使い方は理解しましたが、それが何をするかはわかっていますが、構造体を使用してプライベート クラス メンバーの値を変更する方法を理解できません。

以下は私が参照したソースコードです。

クラス:

プライベート クラス メンバーへのアクセスと変更に使用される構造:

ありがとうございます。間違っていたら訂正してください/適切な方法で質問をすることができませんでした.

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

c++ - winsock recv で 10014 エラーが発生する

私はコードから始めます:

このコードを実行すると、ret が -1 になり、WSAGetLastError() が 10014 を返します。これは、ポインターが不良であることを意味します。
しかし、なぜこれが機能しないのかわかりませんか? reinterpret_cast 行をコメントアウトして、以下の行を使用すると機能します!
reinterpret_cast は危険であると主張することもできますが、 unsigned char と signed char の両方がまったく同じサイズであるため、問題ないと思います。
std::vectors は、私が知る限り、メモリ内で直接アドレス指定しても安全なはずです。

おもしろいのは、send() で同じ vector-type を使って同じことをすると、うまくいくということです! 送信機能:

ご覧のとおり、この場合は CharBuf が const であること以外に違いはありません。

recv() が send() よりも機密性が高いのはなぜですか? recv() は、ポインターが無効であることをどのように知ることができますか (明らかにそうではありません)?? 表示されるのは char 配列だけです!

要求に応じて、受信関数全体を作成します (すべての関数を詳しく説明することはできないことに注意してください。

どうでも。関数を貼り付けているときに見つけました。いつものように、他の人に説明しようとするとエラーが見つかります :) 何が間違っていたのかを理解するのは読者に任せますが、ヒントとして &pData[0] を示します。助けてくれてありがとう:D

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

c++ - C++ の単純なストレージ クラスと厳密なエイリアシング

ストレージ用の小さなクラスを持つための次のコードがあります。

storage::get()gcc 4.4 は、戻ったときに厳密なエイリアシング規則を破っていることを警告しています。

私の知る限り、私はいかなる規則にも違反していません。私は実際に厳密なエイリアシングに違反していますか、それとも gcc はここでうるさくなっていますか?

そして、厳密なエイリアシングを無効にせずに警告を出さないようにする方法はありますか?

ありがとう

編集:

一方、次の実装では警告が表示されません。

編集:

gcc 4.5 以降は警告を発行しません。つまり、これは厳密なエイリアシング ルールの誤解か、gcc 4.4.x のバグであったようです。

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

c++ - STL コンプレックスをキャストする問題fftw_complexへ

FFTW のマニュアルによると、その型はSTL のクラスfftw_complexとビット互換性があります。std::complex<double>しかし、それは私にはうまくいきません:

これは私にエラーを与えます:

私は何を間違っていますか?