ホームページ  >  記事  >  バックエンド開発  >  C コンストラクターに 2 つのシンボルがあるのはなぜですか?

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-24 02:41:09270ブラウズ

Why Are There Two Symbols for C   Constructors?

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

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

  • 完全オブジェクト コンストラクター (C1): このコンストラクターは、仮想基本クラスを含むオブジェクトを完全に初期化します。 .
  • Base Object Constructor (C2): このコンストラクターは、

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

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

追加の詳細

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

以上がC コンストラクターに 2 つのシンボルがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。