0

重複の可能性:
C++ 初期化リスト

class Base
{
public:
int m_nValue;

Base(int nValue=0)
    : m_nValue(nValue)
{
}
};

このコードでは、コンストラクターはm_nvalueメンバー変数を初期化していますか? この構文がよくわかりません:

Base(int nValue=0) : m_nValue(nValue) {}

通常は次のように書きます。

Base(int nValue) { m_nValue = nValue;}

上記の C++ の構文を説明できる人はいますか?

4

3 に答える 3

3

この構文:

Base(int nValue=0)
: m_nValue(nValue)

メンバー初期化子と呼ばれます。指定された nValue で m_nValue を初期化します。この構文は、コンストラクターの本体の前に実行されるため、通常は C++ で好まれます。

于 2013-01-19T01:10:37.093 に答える
1

これはメンバー初期化子リストと呼ばれます。

メンバー初期化子リストは、コロンで始まる初期化子のコンマ区切りリストで構成されます。引数リストの閉じ括弧の後、関数本体の開き括弧の前に配置されます

概念的には、これらの初期化は、オブジェクトが作成されたとき、および括弧内のコードが実行される前に行われます。

注: コンストラクター以外のクラス メソッドでメンバー初期化子リスト構文を使用することはできません。

于 2013-01-19T01:15:18.900 に答える
0

コード内の変数を初期化する方法は、メンバー初期化リストと呼ばれます。通常、このようなリストを使用してconst メンバー変数(通常 - 非 const も) を初期化します。これは、構築時に const 変数に何らかの値を与えることができるためです。

2 番目のタイプの初期化は、基本的には通常のパラメーター化されたコンストラクターです。これは、オブジェクトを持っているときに使用され、オブジェクトの作成時にメンバー変数を初期化する必要があります。

于 2013-01-19T02:53:46.283 に答える