問題タブ [initializer-list]

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 に答える
340 参照

c++ - 初期化子リストのラムダから型を推測できません

上記の例は、(g++ 4.6.1 を使用して) コンパイルに失敗し、次のエラー メッセージが表示されます。

コメント行は正常に機能します (関数の型を指定しなくても)。

これはg ++の癖ですか?または、上記をコンパイルしないように指示する標準に何かありますか?

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

c++ - C++11初期化子リスト+関数ポインタが頭痛の種になっています

文字列をファクトリ関数にマップするグローバルマップを作成しようとしています。これにより、ビルダー関数でiniファイルからキーを読み取り、そのiniファイルとその関連セクションを正しいファクトリ関数に渡すことができます。グローバルマップを含むヘッダーのコードは次のとおりです。

そして、これらのファクトリクラスの1つの例を次に示します。

これはすべて、コンパイル時にエラーを発生させます。

上記のコードはすべてcg::prim::factory、違いが生じる場合に備えて、名前空間に含まれています。Quadとから継承SpherePrimitiveます。私はg++ -O3 -Wall -Wextra -pedantic -std=c++11コンパイルに使用しています。

なぜこれがコンパイルされないのですか?

0 投票する
4 に答える
344 参照

c++ - C ++コンストラクタ初期化リストにメンバー変数が表示されるのはなぜですか?

コードのバグが原因でこれに遭遇しましたが、なぜ許可されているのか興味があります。オブジェクトメンバーをコンストラクター初期化リストに表示できるようにする理由は何ですか?

Clangはこれについて警告を出しますが、残念ながらg++は警告を出しません。

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

c++ - Pod 以外の構造体 + 初期化子リストで演算子 new を使用する

非ポッドメンバーを含む構造体をヒープに割り当て、初期化子リストを使用してそれらを初期化するいくつかのものを試していました。しかし、コンパイラは私のコードでエラーを検出しました。このスニペットはそれを再現します:

(リークがあることは知っています。それは承知しています。これは単なるテスト スニペットです)

指摘された行は、GCC 4.6.3 でコンパイルに失敗し、次のエラーが発生します。

どうやら、コンパイラは、提供された初期化子リストを使用して構造体を初期化できません。奇妙なことに、エラーを生成する行の次の行は、同じイニシャライザ リストを使用して構築された別の行から a をコピーする (おそらく移動する) だけでB、エラーは発生しません。

私がやっていることは何か間違っていますか?つまり、提供されたスニペットの最後の行を使用して生きることができますが、演算子 new と初期化リストを使用して構造体を作成できない理由はありますか?

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

c++ - functorとinitializer_listのコピー

ファンクターやイニシャライザーをコピーするとどうなるかについて少し混乱しています。次のコードでは、オブジェクトを常にコピー/移動すると思いましたが、それがSegfaultsであるかどうかは関係ありません。私は何か間違ったことをしているようですが、私の間違った仮定が何であるかをまだ理解していません。不思議なことに、cppreference.comで、コピーまたは移動コンストラクターが見つからなかったinitializer_listので、これらの場合に実際に何が起こるのだろうかと思います。

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

c++ - イニシャライザリストでの this の使用

クラスとをこの順序Bazで継承するクラスがあるとします。class のコンストラクターは、オブジェクトへのポインターを受け取ります。私がやりたいことは、オブジェクトとしてコンストラクターに渡すことです。FooBarBarFoothisFooBar

実際の例:

これは、たまたま私のコンピューターで、コンパイラーを使用して動作します (いくつかのコンパイラーでテスト済み)。thisしかし、2003 年の標準のセクション 9.3.2 では、この方法を使用すると未定義の動作になるので、運が良かったのではないかと少し不安になります。厳密に言えば、イニシャライザ リストはコンストラクタの本体の外にあります。関連するテキストは次のとおりです。

9.3.2thisポインター非静的メンバー関数
本体では、キーワードthisは非左辺値式であり、その値は関数が呼び出されるオブジェクトのアドレスです。

私の使用法は合法で明確に定義されていますか、それとも未定義の動作ですか?

0 投票する
3 に答える
9154 参照

c++ - C++: 初期化リストで作成されたオブジェクトへの参照メンバーの初期化

次のコードを検討してください。

そのままコンパイルすると、次のエラーが表示されます。

考えられるあらゆるバリエーションを試しました。私は何を間違っていますか?参照メンバーを新しいインスタンスに初期化するにはどうすればよいですか? 今のところ、回避策として参照の代わりに const ポインターを使用していますが、参照を使用することをお勧めします。

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

c++ - 初期化子リストと演算子の RHS

演算子の右辺でイニシャライザ リストを使用できない理由がわかりません。検討:

最新のClang(gccも)は不平を言います:

C++ 標準がこれを禁止するのはなぜですか? または別の言い方をすれば、なぜこれは失敗するのではなく

?

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

c++ - 初期化リストを介して別のクラスのコンストラクターを呼び出しています。問題がある

これは私のサンプルコードです:

の出力が得られるのはなぜ0ですか? http://ideone.com/pf47j

class Baseまた、一般に、上記のオブジェクトベースの、内部で行われたように、別のクラスでメンバーオブジェクトを作成し、そのオブジェクトのコンストラクターを呼び出す正しい方法は何class Barですか?