問題タブ [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++ - reinterpret_castおよびnullメンバー変数
私は次のようなreinterpret_castを使用しています:
メソッド内では、ほとんどのメンバー変数(すべてのハンドル)がnullです。同じアドレスが保証されないことがわかっているので、これはreinterpret_castが原因でしょうか?static_castのように。この場合はstatic_caseを使用する必要があることはわかっていますが、この問題に興味を持ったのです。
c++ - 列挙型のreinterpret_castエラー
そのようなキャストにreinterpret_cast演算子を使用できないのはなぜですか?
c++ - static_castに関する質問
私はコードを書きましたが、その出力と混同しています。
出力は次のとおりです。
しかし、私が知る限り、pb
タイプBを指しています。それに名前の付いた関数はありませdisp()
んか?では、なぜdisp()
クラスDの関数にアクセスできるのでしょうか。
c++ - 通常のキャストは実行時エラーをスローしません
以下のコードを見ると、fun 関数は C のオブジェクトを B のオブジェクトに変換し、B 自身の関数を呼び出します。それはどのようにセグメント障害を与えませんか。これはクラッシュにつながると思います。私のプログラムはクラッシュしていません。なぜそれがうまく機能しているのか誰でも説明できますか?
c++ - static_castおよびRTTIとdynamic_cast
以下のコードを遵守してください。私の知る限り、dynamic_castはstatic_castよりも遅いです。実行時に型を評価するためです。ここでの私の疑問は、以下のようにtypeid()でstatic_castを使用する場合、動的キャストと同じ時間がかかるでしょうか?? dynamic_castよりも高速ですか?
RTTIを使用した静的キャスト:
ダイナミックキャスト:
c++ - 1つのXalanクラスからその基本クラスへのstatic_castを使用できないのはなぜですか?
コンパイラ(g ++)がこのコード行について文句を言うのはなぜですか?
コンパイラから得られるエラーは次のとおりです。
static_castがない場合、コンパイラは次のように出力します。
XalanElementクラスは次のように定義されます。
ドキュメントには、XalanNodeがXalanElementから派生する必要があることも示されています。これは、 XalanElementクラスリファレンスを参照してください。
XalanDocument.hpp内では、getDocumentElement()のメソッドシグネチャは次のとおりです。
c++ - 仮想関数と static_cast
次のコードのような状況で、ポリモーフィック クラスで static_cast を使用した後、仮想関数を安全に呼び出すことができますか、それとも UB ですか?
c++ - static_cast の違いは何ですか(var) と *(int*)&var?
わかりましたので、これをやってみました
x
ケース 2 では、 の最初のバイトが整数であると考えるように再解釈され、ビット パターンがコピーされb
てガベージが生成され、ケース 1 では値が からchar
に変換されることがわかりましたint
。
それとは別に、これら2つの間に違いはありますか?
c++ - C++ の危険なキャスト コード
これは危険なコードだと確信しています。しかし、正確に何がうまくいかないのかを誰かが知っているかどうかを確認したかった.
次のクラス構造があるとします。
そして、次のようにクラスを自動的に拡張する方法が必要だとします。
私ができる本当に重要な保証の 1 つは、他のメンバー変数やメソッドを持たBase
ないことです。Test
それらは本質的に空のクラスです。
(潜在的に) 危険なコードは次のとおりです。
このようなことを行う理由は、私が Test に似たクラスを使用していることですが、現在それを機能させるには、渡されたインスタンスをコピーするとともに、新しいインスタンス T (つまり Test) を作成する必要があります。Test を T のメモリ アドレスに向けることができれば、非常に便利です。
Base が仮想デストラクタを追加せず、Test によって何も追加されない場合、このコードは実際には問題ないと思います。しかし、仮想デストラクタを追加すると、型情報がクラスに追加されるのではないかと心配になります。その場合、メモリ アクセス違反が発生する可能性があります。
最後に、このコードは私のコンピューター/コンパイラー (clang) で正常に動作すると言えますが、これはもちろん、メモリに悪いことをしていないこと、および/または別のコンパイラー/マシンで完全に失敗しないことを保証するものではありません。