問題タブ [list-initialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
533 参照

c++ - g++ 4.4 でのブレース初期化の代替

この vector-of-vector-of-strings を次のように初期化し、g++ 4.4.7 でコンパイルします (オペレーション ポリシーにより、より新しいバージョンは使用できません。 )

でコンパイルするとg++ -std=gnu++0x、次のように失敗します。

この質問は、私の構文は正しいが、g++ 4.4 は私がやろうとしていることを正しくまたは完全にサポートしていないことを示唆しています。

このベクトルのベクトルの初期化を達成するための簡単なフォールバック方法は何でしょうか?

0 投票する
1 に答える
497 参照

c++ - gcc 4.6 と 4.7 のデフォルト ctor の違い

GCC 4.6.1 で、デフォルトのコンストラクターを持つ独自の型のインスタンスを宣言し、その型のオブジェクトをインスタンス化して中かっこ ( Foo my_foo{}; など) で初期化すると、そのクラスの POD メンバー他のコンストラクターが宣言されていない場合にのみゼロ初期化します。デフォルトのもの以外に他のコンストラクターがない場合、期待どおりにゼロ初期化されます。

しかし、GCC 4.7.3 では、どちらの方法でもゼロ初期化が行われます。これは、私が期待した動作です。

ここの違いは何ですか?これはコンパイラのバグですか? これらの GCC バージョンは両方とも、C++11 標準のデフォルトのコンストラクターをサポートしています。

古い GCC バージョンに固執する必要はありませんが、ここで何が起こっているのかを理解したいと思います。

注:メインのctor、op =をデフォルトにしています。可変個引数関数で型を使用できるようにするためだけに ctor をコピーします (clang は、クラスを POD として分類するためにこれを要求しますが、gcc では、ユーザー定義のメイン ctor であっても、可変個引数関数で型を使用することを回避できます。私はなぜ。)

以下は、(両方の GCC バージョンでコンパイルされたバイナリからの) 下部にいくつかの出力を含む、説明するためのサンプル プログラムです。

0 投票する
2 に答える
414 参照

c++ - 中括弧を使用した std::array コピーの構築

次のコードがコンパイルされないのはなぜですか:

GCC 4.8.1 は言う

エラー: 初期化で 'const std::array' を 'long unsigned int' に変換できません: i_{ a.i_ }

0 投票する
2 に答える
1077 参照

c++ - 標準ライブラリに潜んでいる貪欲な初期化子リストの例は?

C++11 以降、標準ライブラリ コンテナーにstd::stringは、イニシャライザー リストを使用するコンストラクターがあります。このコンストラクターは、他のコンストラクターよりも優先されます (コメントで @JohannesSchaub-litb が指摘したように、他の「最適な一致」基準を無視しても)。()これは、括弧で囲まれた形式のコンストラクターをすべて波括弧付きのバージョンに変換するときに、いくつかのよく知られた落とし穴につながります。{}

std::stringこのサイトで 3 番目の例を見つけることができませんでした。Lounge<C++> チャット (@rightfold、@ Abyx 、@JerryCoffin との議論) で話題になりました。の{}代わりに使用する文字は、その文字のコピーから- 番目の文字 (通常は ASCII テーブルから) に()その意味を変更し、その後に他の文字が続きます。nn

65 は char として表すことができ、int に変換されたときに元の値を保持する定数式であるため (§8.5.4/7、箇条書き 4) (ありがとう@JerryCoffinへ)。

質問():スタイル コンストラクターを{}スタイルに変換し、初期化子リスト コンストラクターによって貪欲に一致する標準ライブラリに潜んでいる例は他にありますか?

0 投票する
0 に答える
249 参照

c++ - 中括弧を使用して C++ で配列を再初期化する

オブジェクトのすべてのインスタンスに対して新しい配列を作成することを避けたいので、常に新しい変数を作成することは実際には良い選択肢ではない状況にあります。基本的に、「ポイント」クラスと、コンストラクターがポイントのベクトルを取る「ポリゴン」クラスがあります。各ポイントは手動で個別に設定する必要があるため、それらの間に実際には数学的進行がないため、私が思いついた最も保守的なソリューションは、私が見つけた「MakeVector」関数を使用して変換するものです直線配列をベクトルに。

つまり、1 つのポリゴンを作成するには、次のようにします。

この特定の座標セットには数学的進行がありますが、3D モデリングを行っているため、すべてがそうであるとは限りません。次の行は無効であり、エラーをスローします。

私はいくつかの異なることを試しましたが、これをすばやく実行する実際の方法はありません。作成した配列のすべての値に対して新しい行を配置する必要はありません。ハードコーディングされた値を使用して、これを行う最良の方法は何でしょうか?

0 投票する
1 に答える
2511 参照

c++ - Does the equal sign make a difference in brace initialization? eg. 'T a = {}' vs 'T a{}'

Here are two ways to initialize a variable in C++11:

I tested these two in all scenarios I could think of and I failed to notice a difference. This answer suggests that there is a subtle difference between the two:

For variables I don't pay much attention between the T t = { init }; or T t { init }; styles, I find the difference to be minor and will at worst only result in a helpful compiler message about misusing an explicit constructor.

So, is there any difference between the two?