問題タブ [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++ - 数値を double に static_cast する手間がかかるのはなぜですか?
私が取り組んでいるコードでこれに出くわしました:
( something
sはdouble
sです。)
面倒なことをするのには本当に正当な理由があると思います
static_cast<double>(1)
などですが、タイピングを大幅に減らすことができたようです。
私は何を理解していませんか?
前もって感謝します。
casting - からの無効な変換...Objective-C++
XcodeにすべてをObjective-C++としてコンパイルするように指示しましたが、キャストでエラーが発生しました。
使用しようとするとstatic_cast<CFDictionaryRef>(aInPropertyValue)
何も得られません。まるで(おそらく本当です)私はそれを正しく使用していません。
c++ - CRTPでダウンキャストが有効であることをコンパイル時にチェックする方法は?
私は単純な古い CRPT を持っています (アクセス制限に気を取られないでください - 問題はそれらについてではありません):
これは通常、次のように使用することを目的としています。
今それは私をstatic_cast
悩ませます。(アップキャストではなく) ダウンキャストが必要なので、明示的なキャストを使用する必要があります。現在のオブジェクトが実際に派生クラスであるため、妥当なすべてのケースでキャストは有効です。
しかし、どうにかして階層を変更し、キャストが無効になったらどうしますか?
この場合、明示的なダウンキャストが有効であることをコンパイル時にチェックすることはできますか?
c++ - ダイヤモンド階層のダウンキャスト
static_cast
仮想ベースからダウンキャストできないのはなぜですか?
g ++ 4.5によると:
解決策は使用することdynamic_cast
です?しかし、なぜ。合理的なものは何ですか?
-編集-
以下の非常に良い答え。ただし、サブオブジェクトとvtableがどのように順序付けられるかを正確に説明する回答はありません。次の記事は、gccのいくつかの良い例を示しています:
http ://www.phpcompiler.org/articles/virtualinheritance.html#Downcasting
c++ - C++static_castランタイムオーバーヘッド
以下のコードを参照してください。
a)この場合(単純な継承、仮想メンバーなし)、B :: df()の静的キャストには(何でも)オーバーヘッドがありますか?私は同様の質問に対するいくつかの矛盾する答えを見つけました、それが私が尋ねている理由です...
const M1 * func
b)キャストを避けるために、Aでプライベートにし、Bに新しいプライベートフィールドを導入することを考えていconst M2 * func
ましたが、それは物事を複雑にし、スマートポインターの使用をより困難にします。キャストを避けるためのより良い方法がわかりますか?
c++ - C++ reinterpret_cast よりも 2 連鎖の static_cast を使用する方がよい場合
まず第一に、これは「Why do we have reinterpret_cast in C++ when two chained static_cast can do it's job?」の複製ではありません。.
static_cast
それを達成するために2つのチェーンを使用することさえできない状況を私は知ってreinterpret_cast
います。しかしstatic_cast
、シンプルで読みやすいreinterpret_cast
.
c# - C ++からC#、static_castを列挙型に
VC 6.0 C ++コードの一部をC#に変換しようとしています。具体的には、バイナリデータファイルを解析しているときに、このコードのビットを変換する際に問題が発生しました。
関連するコードを次に示します。
ここでこのスレッドを読みましたが、C#でintをEnumにキャストしましたが、コードで従来のプログラムと同じ結果が得られません。
これがC#での私のコードの一部です:
私はエンディアンの問題を抱えているので、そのようにエンディアンを逆転させています。
それで、おそらくエンディアンの問題がまだ私を失望させているのではないかと思ったので、ここに別の試みがあります:
私がやろうとしていることについて十分な詳細を提供したことを願っています。
編集:
これが私の問題を解決した方法です。明らかに、必要な値はバイナリファイルの4バイトセグメントの最初のバイトに格納されていました。これはループ中です。
c++ - 状況に応じてifステートメント内で異なるデータ型を宣言する:コンパイラをシャットダウンする方法は?
ねえ、私は基本クラスのポインターを取り、それがジョイントの子孫であることを'Joint'
抽出し、ポインターが実際に指している「ジョイント」の種類に基づいて正しいタイプの「定義」をインスタンス化するシリアライゼーション関数を作成しています.'type'
ただし、正しい型へのポインターを static_cast しても、下位クラスが持つ関数を含まない基本クラスのジョイントに関するエラーが引き続き発生します。ポインターが関数を持つ新しい型にキャストされていることをコンパイラーに認識させるにはどうすればよいですか?
また、「typedef」に関するエラーが発生します。これは、join* の「type」に基づいて異なる可能性があり、コンパイルは未定義であると言っています。if ステートメントの 1 つが true であることをコンパイラに伝えるにはどうすればよいですか? (Jointdef は if ステートメント内で宣言されます)
ソースは次のとおりです。
c++ - ユニオンvs.static_cast(void *)
私はコードを書いていて、今まで次のような構造を使用していました。
さまざまなクラスのデータを格納するための一般的な構造が必要であり、それをstd :: vectorで使用したかったので、テンプレートを使用できません。より良いオプションは何ですか:ユニオンまたはvoidポインター?
ボイドポインタは必要なだけのスペースを割り当てますが、c ++は何らかの理由で強い型付き言語であり、これらのデータを使用する必要がある場所にキャストすることは、c++コードを設計する方法ではありません。私が読んだように、代替手段がない限り、voidポインタは使用されるべきではありません。
その代替案は組合である可能性があります。これらはC++に付属しており、voidポインターと非常によく似て、すべてのメンバーに同じメモリスペースを使用します。ただし、価格が高くなります。割り当てられたスペースは、ユニオンで最大の要素のサイズであり、私の場合、サイズ間の違いは大きくなります。
どちらの方法でも必要なことを実行できるため、これはかなり文体的で「正しい言語を使用する」問題ですが、適切に様式化されたc ++コードがその無駄なメモリを補うことができるかどうかを判断できません(最近のメモリはそれほど大きくありませんが)懸念)。