以下のコードスニペットを参照してください。 メンバ初期化子リスト表記:かっこ対かっこ
class Vector {
public:
Vector(int s) :elem{new double[s]}, sz{s} { } //construct a Vector
double& operator[](int i) { return elem[i]; } //element access: subscripting
int size() { return sz; }
private:
double* elem; // pointer to the elements
int sz; // the number of elements
};
は、ここで私は3行目のメンバー初期化子リスト心配です
、Straustrupは2つの初期化子文elem{new double[s]}
と
sz{s}
からコロンをseperates:C++のStraustrupの
Aツアーの17。 質問:なぜこれらの2つのイニシャライザーステートメントを作成するには角括弧({..}
)を使用しますか?私は括弧付きのイニシャライザーリストを作っているウェブの人々のどこかで見てきました。これも(AFAIK)が法的にelem(new double[s])
とsz(s)
と読むことができるようになりました。では、これら2つの表記法の間に意味の違いがありますか?これらの変数を(イニシャライザリストのコンテキスト内で)初期化できる他の方法はありますか?
中括弧はC++ 11標準では新しく、[* uniform initialization *](https://mbevin.wordpress.com/2012/11/16/uniform-initialization/)と呼ばれるものに使用されています。 。多くの場合、違いはありません。 –
括弧で初期化していますか?つまり 'sz(s)'と 'elem(new double [s])'はどちらの場合でもコンストラクタが呼び出されていますか? – George
'int'も' double * 'もコンストラクタを持たないので、コンストラクタをどのように呼び出すことができます。それは単純に*初期化*です。あなたは期待しません。 'int sz = 5'はコンストラクタを呼び出しますか?初期化リストに 'sz(s)'や 'sz {s}'( 's'が' 5'だった場合)と同じことをしています。 –