問題タブ [static-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++ 防御的プログラミング: 型安全性を備えたバッファーからの読み取り
私が所有していないクラスがあるとしましょう: DataBuffer. さまざまな get メンバー関数を提供します。
このバッファーに含まれる構造体から読み取る場合、フィールドの順序とサイズがわかっているので、将来のコード変更でエラーが発生する可能性を減らしたいと考えています。
次に、誰かが変更をチェックインして、ヘッダーを書き込む前に何かを行います。
以下は、変更に対してコードを強化するための受け入れ可能な方法ですか? 関数名を getByte や getUShort などに変更することはできません。DataBuffer から継承することもできますが、それはやり過ぎのように思えます。
目に安全ではないレガシーコードの例で更新されました:
c++ - unsigned を signed と解釈する
私は組み込みプラットフォーム (ARM) で作業しており、ビット パターンを扱うときは注意が必要です。この行が私の影響を超えているふりをしましょう:
署名なしと解釈すると、これは 206 になります。しかし、実際には署名されているため、-50に似ています。この値を署名済みとして引き続き使用するにはどうすればよいですか?
どちらでもない (すべての入力値に対して 0x10 または 0x00 になる)
ビットをそのままにしておきたいだけです。(bar == 0xCE)
逆に、ビットパターンを台無しにすることなく、負の数を表すビットパターンを符号なし変数に入れる方法に興味があります。私はGCCを使用しています。
c++ - 仮想継承が関係している場合、static_cast を使用してダウンキャストできないのはなぜですか?
次のコードを検討してください。
これは標準 ( ) で禁止されているため、実質的にから継承される[n3290: 5.2.9/2]
ため、コードはコンパイルされません。を継承から削除すると、コードが有効になります。Derived
Base
virtual
このルールが存在する技術的な理由は何ですか?
c++ - 多重継承を使用している場合、静的キャストはいつ安全ですか?
私は、何かがどのタイプであるかを知っている状況にいることに気づきました。Type は、3 つ (またはそれ以上) の継承レベルの 1 つです。私は返す factory を呼び出しますB*
が、T は型の最高レベル (私のコードがそれが何であるかを知っている場合) または 2 番目のレベルのいずれかです。
とにかく、私はstatic_cast
間違ったことをテンプレートで行いました。私の質問は、安全に静的キャストできるのはいつですか? そんな時ってありますか?この場合、動的キャストが無視する (そして null を返す) 奇抜なものとして T を誤って持っていると、むしろコンパイル エラーが発生するので、この場合に実行しました。ただし、正しい型がわかっている場合、ポインターが調整されないため、ポインターが正しくありません。この場合、静的キャストが許可される理由がまったくわかりません。
ダウン キャストに static_cast を安全に使用できるのはいつですか? 状況はありますか?今では、 a を使用するのは常に間違っているようですstatic_cast
(目的がダウンキャストである場合)
わかりました、それを再現する方法を見つけました。
c++ - クラス オブジェクト ポインタをメッセージ キューの char * にパックする
POSIXメッセージキューを介してクラスオブジェクトポインタを適切かつ安全に渡すことは可能ですか?
例えば、
受信側では、reinterpret_cast
back to my Object
?を実行します。
Linux ではメッセージ キューがファイル記述子を使用するため、これがどのように機能するのか興味があります。私は失敗しましたが、何か間違ったことをしているのではないかと思います。
c++ - 「関連のない型」間の static_cast
このクラス構造がある場合:
なぜこのキャストを実行できるのですか?
AとBは無関係ですよね?
c++ - C ++ポリモーフィズム、不完全なダウンキャスト
当たり障りのない基本型への参照を保持する配列があります。それを呼び出しましょうObject
。
Class1
私はから派生Object
しClass2
ましたClass1
。
ToString()
私はキャストしObject *
て電話しClass1 *
ます
私の質問は、オブジェクトが実際にあるClass2
が、具体的にはそれにダウンキャストされていない場合、この出力は1または2になるのでしょうか?キーワードはvirtual
意図した効果を持っていますか?
c++ - チェーン化された static_cast はどのように明確に定義されていますか?
(5.2.9/10) 「cv1 void へのポインター」型の右辺値は、「cv2 T へのポインター」型の右辺値に変換できます。ここで、T はオブジェクト型であり、cv2 は cv-qualification と同じかそれ以上です。 cv-修飾より、cv1. 「cv void へのポインター」に変換され、元のポインター型に戻されるオブジェクトへのポインター型の値は、元の値になります。
from のキャストの結果はvoid*
(int*
元のポインター型) になっているので、次のキャストが有効になる理由は何ですか?
c++ - static_castはパブリックメンバー関数へのアクセスを制限しますか?
次の例のstatic_castで、「エラー:「A」は「B」のアクセスできないベースです」というメッセージが表示されます。
ただし、代わりにreinterpret_castまたはCスタイルの型キャスト((Derived *)this)-> funB()を使用すると、コンパイル/動作します。この動作は正しいですか?
使用したコンパイラ:gccバージョン4.5.1 20100924(Red Hat 4.5.1-4)(GCC)。
ありがとう。
c++ - テンプレート型変数を初期化するにはどうすればよいですか?
どちらの方がよいですか?
編集:T
プリミティブ型です。