5

C++ のトリッキーな質問があります。デリゲート コンストラクターを含むコンストラクター初期化リストがある場合、リストの実行順序はどうなりますか?

ここには、競合する 2 つの標準ルールがあります
。1.) コンストラクターの初期化リストは、リストの順序ではなく、項目の宣言の順序で実行されます。
2.) コンストラクター初期化リスト内の委譲コンストラクターは、常に「親コンストラクター」が実行される前に呼び出されます。

どのルールが優れていますか?(コンストラクターもクラス アイテムであるため) なぜこれが重要なのか: 委譲されたコンストラクターが、「マザー コンストラクター」によって既に初期化されているアイテムを再初期化する、またはその逆であると仮定します。

4

1 に答える 1

3

§12.6.2/6 は言う

mem-initializer-idがコンストラクターのクラスを指定する場合、それが唯一のmem-initializer になります。ターゲット コンストラクターが戻ると、委譲コンストラクターの本体が実行されます。

コンストラクターをデリゲートする前に何も初期化できないため、競合はありません。コンストラクターの委譲は単にそのコンストラクターを呼び出し、ターゲット コンストラクターの初期化子リストが実行され、ターゲット コンストラクターが実行され、次にプリンシパル コンストラクターが実行されます。

于 2013-02-13T16:14:52.473 に答える