問題タブ [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++ - char * と unsigned char * の間で static_cast できないのはなぜですか?
どうやらコンパイラはそれらを無関係な型と見なしているため、reinterpret_cast
必須です。なぜこれがルールなのですか?
c++ - スライスしても static_cast が null ポインタで機能するのはなぜですか?
多重継承を使用すると、スライスによって親オブジェクトへのアドレスが葉オブジェクトへのアドレスとは異なります。
したがって、Z
オブジェクトがある場合z
、そのアドレス&z
は親のアドレスと一致しません。は より 4 バイト高くなります。Y
static_cast<Y*>(&z)
&z
良い点static_cast
は、それが静的であるため、ランタイムを占有しないことです(dynamic_cast
つまり、 と比較して)。ただし、Z*
を指すがある場合0
、親へのすべてのキャストは null ポインターも生成する必要があります。なぜこれが機能し、どのように実装されるのですか? それは、すべての単一static_cast
が分岐命令を導入することを意味しますか?
c++ - 「this」オブジェクトのstatic_castとconst_castを使用してconst-nessを追加することのC++の違いは?
Scott Meyersによると、getterのconstバージョンとgetterのnon-constバージョンでコードが繰り返されるのを防ぐために、non-constバージョンからメソッドのconstバージョンを呼び出しstatic_cast<const A&>(*this).Methodology();
ます。私が入力したVisualAssistX Intellisense:const_cast<const A&>(*this).Methodology();
そしてそれはうまく機能しました。
この場合、特定のキャストを使用した場合の違いは何ですか?
使用中のIDE:VisualStudio2010。
c++ - static_cast演算子を使用した安全でないキャストがクラッシュしないのはなぜですか?
次のサンプルコードを検討してください。
dummy
1行目では、派生クラスオブジェクトのアドレスを、基本クラスオブジェクトへのポインタを受け取る関数に渡しています。したがって、static_cast
関数内dummy
は安全です。
Line2では、基本クラスオブジェクトのアドレスを関数に渡しています。したがって、static_cast
関数内dummy
は安全ではありません。
しかし、コードを実行すると、プログラムは正常に動作します。not safe
一言で言えば、プログラムは実行時にクラッシュするはずだと思いました。しかし、クラッシュは発生しませんでした。
これが私が得た出力です。
プログラムが実行時にクラッシュしなかった理由は何ですか?
c++ - デフォルトの引数値のstatic_cast
次のようなデフォルトの引数static_castを持つコンストラクターが欲しいです。
どこ
これにfunc_double_double_t
似た多くの関数オブジェクトの基本クラスです。
GCCはstatic_cast
、上記のコンストラクターに対して「無効」と言います。そのような振る舞いを実現する方法はありますか?
c++ - C++ で削除を置き換える、誤った情報
SSE 最適化メンバーを含むクラスでの 16 バイト アラインメントの問題を解決しようとしています (そして解決しました)。しかし、私を悩ませているのは、オンラインで見つけた例の大部分に、完全に冗長に見えるが多くの場所で繰り返されているコード行が含まれていることです。
問題の行は
pC は決して参照されず、関数の最後で範囲外になるため、それを行うポイントは何ですか? 私は行を取り出してみましたが、まったく違いがないように見えますが、その行は多くの例に表示されます! 本当に明らかな何かが欠けているのでしょうか、それとも異常なコード行が盲目的に例から例へとコピーされ、多くの「チュートリアル」で流行していますか?
c++ - C++ std::vector 型のポインターを設定する方法std::vector 型のオブジェクトへ
背景:
私は C++ で物理エンジンを構築しています。このエンジンは、デカルト空間で n 体システムの重力進化を計算し、それを定義済みの一連の座標系に変換します。最終的には、開始座標系を任意にする (デカルト座標系だけでなく、座標系 'n' で計算する) ことが目標ですが、それは遠い目標です。
問題:
座標系は互換性があるはずなので、デカルト座標系をベース座標系に拡張しました。
std::vector<Particle*>
typeのメンバー オブジェクトを指すtype のポインターを作成しようとすると、エラーが発生しますstd::vector<CoordMember*>
。
コンパイラ エラーは次のとおりです。
この時点で、 のデータstate->members
はすべて 型であることがわかっていますParticle*
。私が知らないのは、このキャストを可能にするために何をしなければならないかということです. 何か案は?
tl;dr:
c++ - void *にキャストして、C++でオブジェクトをpthreadに渡します
オブジェクトをpthread_create関数に渡す方法について少し混乱しています。void *へのキャスト、pthread_createへの引数の受け渡しなどに関する断片的な情報をたくさん見つけましたが、それをすべて結び付けるものは何もありません。私はそれをすべて一緒に結び付けて、愚かなことを何もしていないことを確認したいだけです。次のスレッドクラスがあるとしましょう。
編集:不一致を修正しましたstatic_cast
。
明確にするために、クラス内のデータには、ミューテックスを使用して実際のデータを保護するProtectedBuffer
などのメソッドでのみアクセスできます。ProtectedBuffer::push_back(int arg)
私の主な質問は:私はstatic_cast
正しく使用していますか?そして、私の2番目の質問はvirtual void *thread_routine(void *arg)
、渡されたvoidポインターをへのポインターにコピーする最初の行が必要ProtectedBuffer
ですか?
また、問題を引き起こす可能性のある他のことをした場合は、それを聞いていただければ幸いです。
gcc - static_cast / float / bitset / const の奇妙さ
ほんの数時間前に、次の質問が出てきました:変数は定数式に現れることはできません
OPにとって幸いなことに、提供された回答で彼の問題は解決しましたが、解決策を再現できません。
コードをさらに単純化しようとしましたが、次のことに行き詰まっています。
でコンパイルした場合-pedantic
、最初の例はコンパイラによって受け入れられますが、除算のあるもの (ただし明らかに同じ数) は拒否され、「length_2 は定数式に表示できません」というメッセージが表示されます。
なし-pedantic
でもありでも、-pedantic -std=c++0x
それ以上の警告なしに受け入れられます。
これは完全な出力ですg++ -v
(ドイツ語で申し訳ありませんが、とにかく正しい情報が得られると確信しています):
この動作の理由は何ですか? 1.0f
特別な定数として認識されているため、 static_cast の動作が変わっていると思いますか?