問題タブ [dynamic-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++ - dynamic_castのパフォーマンス?
質問を読む前に:
この質問は、を使用することがどれほど役立つかについてではありませんdynamic_cast
。そのちょうどそのパフォーマンスについて。
最近dynamic_cast
、よく使われるデザインを開発しました。
同僚と話し合うと、ほとんどの人がdynamic_cast
パフォーマンスが悪いので使用すべきではないと言います(これらは異なるバックグラウンドを持ち、場合によってはお互いを知らない同僚です。私は巨大な会社で働いています)
私は、単に信じるのではなく、このメソッドのパフォーマンスをテストすることにしました。
次のコードが使用されました。
上記のコードはboost::date_time
、Linux上のメソッドを使用して、使用可能な値を取得します。
1回の実行で3dynamic_cast
回実行しましたが、それらを測定するためのコードは同じです。
1回の実行の結果は次のとおりです
。Cast1の持続時間:74マイクロ秒
Cast2の持続時間:2マイクロ秒
Cast3の持続時間:1マイクロ秒
最初のキャストは常に74〜111マイクロ秒かかり、同じ実行での次のキャストは1〜3マイクロ秒かかりました。
それで最後に私の質問:
本当にdynamic_cast
パフォーマンスが悪いのですか?
テスト結果によると、そうではありません。私のテストコードは正しいですか?
なぜそんなに多くの開発者がそうでなければ遅いと思うのですか?
c++ - "void*"からのdynamic_cast
これによると、void*
はRTTI情報を持っていないため、からのキャストvoid*
は合法ではなく、意味があります。
私が正しく覚えていれば、dynamic_cast
fromvoid*
はgccに取り組んでいました。
問題を明確にしていただけませんか。
c++ - dynamic_castの混乱
私はこれをあきらめます...
$ 5.2.7 / 2- "Tがポインター型の場合、vは完全なクラス型へのポインターの右辺値であり、結果はタイプTの右辺値になります。Tが参照型の場合、vはの左辺値になります。完全なクラス型であり、結果はTによって参照される型の左辺値です。」
上記に従って、次のコードは整形式である必要があります。
そうではありません。すべてのコンパイラは、dynamic_castのオペランドがポリモーフィックではないことについて不平を言います。
$ 5.2.7 / 6-それ以外の場合、vはポリモーフィック型(10.3)へのポインタまたは左辺値になります。
だから私の質問は$5.2.7/ 2はどういう意味ですか?なぜ$5.2.7/ 6がここで始まるのですか?
c++ - FAQ:クラスに少なくとも1つの仮想メソッドがある場合にのみdynamic_castが機能するのはなぜですか?
これはC++ではコンパイルされません。
c++ - boost::shared_ptr と動的キャスト
基底クラスの使用に問題がありshared_ptr
ます。逆参照するときに派生クラスのメソッドを呼び出すことができないようです。コードは私よりも冗長になると思います。
c++ - 多重継承中に「横向き」に dynamic_cast できないのはなぜですか?
次のコードは std::bad_cast をスローします
正しく評価するために「完全な継承格子をトラバースする」ため、dynamic_cast に実装パフォーマンスのトレードオフがあることを読んだことを覚えています。ここでコンパイラが行う必要があるのは、最初にキャストアップしてから再度キャストダウンすることです。
上記の作業を行うことは可能ですか、それとも追加する必要があり
virtual Foo* Bar::as_foo()=0;
ますか?
c++ - C++ dynamic_cast - ポリモーフィック要件とダウンキャスト
次のコードではobj
、ケース 1 の構築中にderived
クラス オブジェクトも構築しますが、そのメンバー関数にはobj
. そのため、ソースとして使用してダウンキャストしている間 (つまり、ケース 2)、既にobj
構築されています。derived
なぜobj
ポリモーフィックである必要があるのでしょうか?
上記の説明であなたを混乱させた場合、アップキャスト時に がポリモーフィックである必要がないのにobj
、ダウンキャスト中はを使用している間はポリモーフィックである必要があるのはなぜですか?dynamic_cast
c++ - 仮想関数が1つもない場合、dynamic_castはstatic_castとして動作しますか?
仮想関数のないクラス階層では、RTTIの情報が格納されていないためdynamic_cast
、単純なものとして動作しますか、それともエラーが発生しますか?static_cast
objective-c - How to dynamic_cast in objective c
I'd like to write this code on objective c:
ball is a subclass of ElementJeu... Does anything similar exist in obj-c?
Thanks
boost - C++ boost::shared_ptr & boost::weak_ptr & dynamic_cast
私はこのようなものを持っています:
今度はアプリケーションを変更して、boost shared_ptr と weak_ptr を使用し、食品インスタンスを 1 か所で削除できるようにします。次のようになります。
しかし問題は、dynamic_cast が weak_ptr で動作しないように見えることです
オブジェクトが指すオブジェクトが派生型であることがわかっている場合、 aweak_ptr<Fruit>
からa を取得するにはどうすればよいですか?weak_ptr<Food>