9

以下の _currentHandle() とはどういう意味ですか?

template<class SpiHandleT>
class SpiHandleIterator : public ISpiHandleIterator<SpiHandleT>
{
public:
    SpiHandleIterator() : _currentHandle()
    {
    }
    ...
protected:
    SpiHandleT _currentHandle;
};
4

1 に答える 1

25

これはvalue-initializationとして知られています。C++03 標準、§8.5/7 から:

初期化子が括弧の空のセット、つまり () であるオブジェクトは、値で初期化されます。

そして§8.5/5から:

タイプのオブジェクトを値で初期化Tするとは、次のことを意味します。

  • ユーザーが宣言したコンストラクターを持つクラス型の場合T、デフォルトのコンストラクターTが呼び出されます (アクセス可能なデフォルトのコンストラクターがない場合、初期化は整形式でTはありません)。
  • ユーザーが宣言したコンストラクターを持たない非共用体クラス型の場合T、すべての非静的データ メンバーと基本クラス コンポーネントTは値で初期化されます。
  • が配列型の場合T、各要素は値で初期化されます。
  • それ以外の場合、オブジェクトはゼロで初期化されます

タイプのオブジェクトをゼロで初期化Tするとは、次のことを意味します。

  • がスカラー型の場合T、オブジェクトは0(ゼロ) に変換された値に設定されTます。
  • T非共用体クラス型の場合、各非静的データ メンバーと各基本クラス サブオブジェクトはゼロで初期化されます。
  • Tが共用体型の場合、オブジェクトの最初の名前付きデータ メンバー) はゼロで初期化されます。
  • が配列型の場合T、各要素はゼロで初期化されます。
  • Tが参照型の場合、初期化は実行されません。

したがって、あなたの場合、それはの定義に依存しますSpiHandleT:

  • スカラーの場合、ゼロで初期化されます
  • ユーザー宣言されたコンストラクターのないクラス型の場合、そのサブオブジェクトは (再帰的に) 値で初期化されます
  • ユーザー宣言のコンストラクターを持つクラス型の場合、デフォルトで構築されます
于 2012-06-22T21:31:58.577 に答える