問題タブ [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.
c++ - C++スタイルのキャストを使用してVoid*からTYPE*にキャストします:static_castまたはreinterpret_cast
したがって、Void*からType*に、またはType*からVoid*に変換する場合は、次を使用する必要があります。
また
私にはstatic_castの方が正しいように見えますが、両方が同じ目的で使用されているのを見てきました。また、変換の方向も重要です。つまり、私はまだstatic_castを次の目的で使用する必要があります:
C ++スタイルのキャストに関する他の質問を読みましたが、このシナリオの正しい方法がまだわかりません(static_castだと思います)
c++ - より小さいサイズの配列への C++ キャスト
これは、C++ 言語のさまざまな癖に関する興味深い質問です。ポイントの配列を四角形の角で埋めることになっている関数のペアがあります。それには 2 つのオーバーロードがあります。1 つは を受け取り、Point[5]
もう 1 つは を受け取りますPoint[4]
。5 ポイント バージョンは閉じた多角形を参照しますが、4 ポイント バージョンは 4 つのコーナー、ピリオドだけが必要な場合です。
明らかに、ここには作業の重複があるので、4 ポイント バージョンを使用して 5 ポイント バージョンの最初の 4 ポイントを入力できるようにしたいので、そのコードは複製しません。(重複するほどではありませんが、コードをコピーして貼り付けるたびにひどいアレルギー反応を起こすので、それは避けたいと思います。)
T[m]
問題は、C++ はa をT[n]
whereに変換するという考えを気にしていないようですn < m
。static_cast
何らかの理由でタイプに互換性がないと考えているようです。reinterpret_cast
もちろんうまく処理できますが、危険な動物であり、原則として、可能な限り避けたほうがよいでしょう。
だから私の質問は、配列タイプが同じであるサイズの配列をより小さなサイズの配列にキャストするタイプセーフな方法はありますか?
[編集] コード、はい。パラメーターは実際には単なるポインターではなく配列への参照であるため、コンパイラーは型の違いを認識していることを言及する必要がありました。
[Edit2] 参照渡し配列を渡すポイントは、呼び出し元が正しい「出力パラメーター」を渡していることを少なくとも漠然と確信できるようにすることです。
c++ - C++ reinterpret_cast
この単純なコードが機能しない理由がわかりません:
reinterpret_cast
が機能しない理由を誰かに教えてもらえますか?
c++ - reinterpret_cast に関する質問
私は次のコードを持っています
出力は次のとおりです: 7648 reinterpret_cast について説明してください
c++ - reinterpret_castキャストコスト
私の理解では、C ++ reinterpret_castとCポインターキャストは単なるコンパイル時の機能であり、パフォーマンスコストはまったくありません。
これは本当ですか?
c++ - 厳密なエイリアシングルールに違反しているキャスト
unsigned long *を受け取る関数があり、unsigned int *を受け取る外部ライブラリに渡す必要があります。このプラットフォームでは、unsigned int/longは同じサイズです。
これにより、厳密なエイリアシングルールに違反しているという警告が生成されます。回避策はありますか?
ありがとうございました
編集:明確ではないことをお詫び申し上げます。コードはアトミックアップデートであるため、ライブラリを回って保存することはできません。アセンブリにドロップダウンすることもできますが、C++でこれを実行したいと思います。
c++ - 構造体の作成時に変更された Class Private メンバー (C++)
私はC++のいくつかのコードを調べていました。reinterpret_cast
演算子の概念に出くわした場所。
編集1:
クラスのプライベート メンバーへのアクセスはお勧めできません。 しかし、状況によっては、先に進んでそれらにアクセスする必要があります。 私の概念を明確にするために、この質問を出しました。
私が参照した例では、クラスのプライベート メンバーは、同じ変数を持つ構造体を作成するだけでアクセスされ、後で
reinterpret_cast
演算子を実装することによって変更されます。
reinterpret_cast
演算子の使い方は理解しましたが、それが何をするかはわかっていますが、構造体を使用してプライベート クラス メンバーの値を変更する方法を理解できません。
以下は私が参照したソースコードです。
クラス:
プライベート クラス メンバーへのアクセスと変更に使用される構造:
ありがとうございます。間違っていたら訂正してください/適切な方法で質問をすることができませんでした.
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
c++ - C++ の単純なストレージ クラスと厳密なエイリアシング
ストレージ用の小さなクラスを持つための次のコードがあります。
storage::get()
gcc 4.4 は、戻ったときに厳密なエイリアシング規則を破っていることを警告しています。
私の知る限り、私はいかなる規則にも違反していません。私は実際に厳密なエイリアシングに違反していますか、それとも gcc はここでうるさくなっていますか?
そして、厳密なエイリアシングを無効にせずに警告を出さないようにする方法はありますか?
ありがとう
編集:
一方、次の実装では警告が表示されません。
編集:
gcc 4.5 以降は警告を発行しません。つまり、これは厳密なエイリアシング ルールの誤解か、gcc 4.4.x のバグであったようです。
c++ - STL コンプレックスをキャストする問題fftw_complexへ
FFTW のマニュアルによると、その型はSTL のクラスfftw_complex
とビット互換性があります。std::complex<double>
しかし、それは私にはうまくいきません:
これは私にエラーを与えます:
私は何を間違っていますか?