「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ コンストラクターに 2 つのシンボルがあるのはなぜですか?

C++ コンストラクターに 2 つのシンボルがあるのはなぜですか?

2024 年 11 月 18 日に公開
ブラウズ:620

Why Are There Two Symbols for C   Constructors?

C コンストラクターのデュアル シンボル

Itanium C ABI では、コンストラクターのマングル名にその型とパラメーターに関する情報が含まれることが指定されています。したがって、ライブラリで観察される 2 つのコンストラクター エントリは、それぞれの異なるコンストラクター タイプに由来しています。

  • Complete Object Constructor (C1): このコンストラクターは、仮想基本クラスを含むオブジェクトを完全に初期化します。 .
  • Base Object Constructor (C2): このコンストラクターは、データ メンバーおよび非仮想基本クラスとともに、オブジェクト自体を初期化します。

二重シンボルと複数の定義エラー

二重エントリがあるにもかかわらず、C1 および C2 サフィックスの使用により競合するシンボル定義は発生しません。 ABI は、マングルされた名前が一意であることを保証し、これら 2 つのコンストラクター型を異なる方法で処理するためのコンパイラ サポートを提供します。

追加の詳細

  • 仮想ベースがない場合クラス、完全なオブジェクト コンストラクターと基本オブジェクト コンストラクターは同一であり、十分な最適化の下でシンボルを同じコードにエイリアスすることができます。
  • デュアル コンストラクター シンボルの必要性は主に、異なるオブジェクトが継承するポリモーフィズムのサポートによって推進されます。異なる基本クラスであり、特殊な初期化が必要です。
  • この動作はかつて c filt 出力に表示されていましたが、現在は含まれていません。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3