4

一部のユーザーは、C1 および C2 という C++ オブジェクトに使用できるコンストラクターがいくつかあることを知っています。しかし、GCC ソースによると、コンストラクターの 3 番目のバリアントである C3 の「完全なオブジェクト割り当てコンストラクター」が存在する可能性があります (関数gcc-4.8/gcc/cp/mangle.cの直前にファイルを確認してください)。write_special_name_constructor

http://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/cp/mangle.c;h=10c2e2beb0c422e4f56e17e7659fbeb4ab3ee31b;hb=refs/tags/gcc-4_8_1-release#l1644

1645 /* Handle constructor productions of non-terminal <special-name>.
1646    CTOR is a constructor FUNCTION_DECL.
1647 
1648      <special-name> ::= C1   # complete object constructor
1649                     ::= C2   # base object constructor
1650                     ::= C3   # complete object allocating constructor
1651 
1652    Currently, allocating constructors are never used.    <<<<<
1653 
1654    We also need to provide mangled names for the maybe-in-charge
1655    constructor, so we treat it here too.  mangle_decl_string will
1656    append *INTERNAL* to that, to make sure we never emit it.  */

C3 が必要なのに、GCC で使用されないのはなぜですか? C3 コンストラクターを生成する一般的な C++ コンパイラはありますか?

C3 は ABI pdf で文書化されていますか?

4

1 に答える 1

4

アイデアは、の後に続くC3の最適化されたバージョン、つまり事前にインライン化されたバージョンであるということです。GCC は、別のコンパイラが使用する場合に備えて作成する必要があります。それは明らかに、インライン化の決定に依存する可能性がありますが、これは一般的に自明ではありません。::operator new(sizeof(class))C1

于 2013-07-18T23:34:20.897 に答える