問題タブ [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.
c++ - 初期化子リストのラムダから型を推測できません
上記の例は、(g++ 4.6.1 を使用して) コンパイルに失敗し、次のエラー メッセージが表示されます。
コメント行は正常に機能します (関数の型を指定しなくても)。
これはg ++の癖ですか?または、上記をコンパイルしないように指示する標準に何かありますか?
c++ - C++11初期化子リスト+関数ポインタが頭痛の種になっています
文字列をファクトリ関数にマップするグローバルマップを作成しようとしています。これにより、ビルダー関数でiniファイルからキーを読み取り、そのiniファイルとその関連セクションを正しいファクトリ関数に渡すことができます。グローバルマップを含むヘッダーのコードは次のとおりです。
そして、これらのファクトリクラスの1つの例を次に示します。
これはすべて、コンパイル時にエラーを発生させます。
上記のコードはすべてcg::prim::factory
、違いが生じる場合に備えて、名前空間に含まれています。Quad
とから継承Sphere
しPrimitive
ます。私はg++ -O3 -Wall -Wextra -pedantic -std=c++11
コンパイルに使用しています。
なぜこれがコンパイルされないのですか?
c++ - C ++コンストラクタ初期化リストにメンバー変数が表示されるのはなぜですか?
コードのバグが原因でこれに遭遇しましたが、なぜ許可されているのか興味があります。オブジェクトメンバーをコンストラクター初期化リストに表示できるようにする理由は何ですか?
Clangはこれについて警告を出しますが、残念ながらg++は警告を出しません。
c++ - Pod 以外の構造体 + 初期化子リストで演算子 new を使用する
非ポッドメンバーを含む構造体をヒープに割り当て、初期化子リストを使用してそれらを初期化するいくつかのものを試していました。しかし、コンパイラは私のコードでエラーを検出しました。このスニペットはそれを再現します:
(リークがあることは知っています。それは承知しています。これは単なるテスト スニペットです)
指摘された行は、GCC 4.6.3 でコンパイルに失敗し、次のエラーが発生します。
どうやら、コンパイラは、提供された初期化子リストを使用して構造体を初期化できません。奇妙なことに、エラーを生成する行の次の行は、同じイニシャライザ リストを使用して構築された別の行から a をコピーする (おそらく移動する) だけでB
、エラーは発生しません。
私がやっていることは何か間違っていますか?つまり、提供されたスニペットの最後の行を使用して生きることができますが、演算子 new と初期化リストを使用して構造体を作成できない理由はありますか?
c++ - functorとinitializer_listのコピー
ファンクターやイニシャライザーをコピーするとどうなるかについて少し混乱しています。次のコードでは、オブジェクトを常にコピー/移動すると思いましたが、それがSegfaultsであるかどうかは関係ありません。私は何か間違ったことをしているようですが、私の間違った仮定が何であるかをまだ理解していません。不思議なことに、cppreference.comで、コピーまたは移動コンストラクターが見つからなかったinitializer_list
ので、これらの場合に実際に何が起こるのだろうかと思います。
c++ - イニシャライザリストでの this の使用
クラスとをこの順序Baz
で継承するクラスがあるとします。class のコンストラクターは、オブジェクトへのポインターを受け取ります。私がやりたいことは、オブジェクトとしてコンストラクターに渡すことです。Foo
Bar
Bar
Foo
this
Foo
Bar
実際の例:
これは、たまたま私のコンピューターで、コンパイラーを使用して動作します (いくつかのコンパイラーでテスト済み)。this
しかし、2003 年の標準のセクション 9.3.2 では、この方法を使用すると未定義の動作になるので、運が良かったのではないかと少し不安になります。厳密に言えば、イニシャライザ リストはコンストラクタの本体の外にあります。関連するテキストは次のとおりです。
9.3.2
this
ポインター非静的メンバー関数
の本体では、キーワードthis
は非左辺値式であり、その値は関数が呼び出されるオブジェクトのアドレスです。
私の使用法は合法で明確に定義されていますか、それとも未定義の動作ですか?
c++ - C++: 初期化リストで作成されたオブジェクトへの参照メンバーの初期化
次のコードを検討してください。
そのままコンパイルすると、次のエラーが表示されます。
考えられるあらゆるバリエーションを試しました。私は何を間違っていますか?参照メンバーを新しいインスタンスに初期化するにはどうすればよいですか? 今のところ、回避策として参照の代わりに const ポインターを使用していますが、参照を使用することをお勧めします。
c++ - 初期化子リストと演算子の RHS
演算子の右辺でイニシャライザ リストを使用できない理由がわかりません。検討:
最新のClang(gccも)は不平を言います:
C++ 標準がこれを禁止するのはなぜですか? または別の言い方をすれば、なぜこれは失敗するのではなく
?
c++ - 初期化リストを介して別のクラスのコンストラクターを呼び出しています。問題がある
これは私のサンプルコードです:
の出力が得られるのはなぜ0
ですか?
http://ideone.com/pf47j
class Base
また、一般に、上記のオブジェクトベースの、内部で行われたように、別のクラスでメンバーオブジェクトを作成し、そのオブジェクトのコンストラクターを呼び出す正しい方法は何class Bar
ですか?