問題タブ [aggregate-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 投票する
7 に答える
190132 参照

c++ - コンストラクター初期化子でのメンバー配列の初期化

=その理由は、配列は構文でのみ初期化できるためだと思います。つまり、次のとおりです。

質問

  1. どうすればやりたいことを実行できますか (つまり、コンストラクターで配列を初期化します (本体に要素を割り当てません))。それは可能ですか?
  2. C++03 標準は、ctor 初期化子での集計 (配列を含む) の初期化について特別なことを述べていますか? または、上記のコードの無効性は、他のいくつかのルールの結果ですか?
  3. C++0x 初期化リストは問題を解決しますか?

PSベクトル、boost::arrays、および配列に対するそれらの優位性については言及しないでください。

0 投票する
8 に答える
90958 参照

c++ - C++0xでの変換の絞り込み。それは私だけですか、それともこれは重大な変化のように聞こえますか?

C ++ 0xは、aから.へのいわゆるナローイング変換を必要とするため、次のコードおよび同様のコードを不正な形式します。doubleint

この種の初期化が実際のコードで多く使用されているのではないかと思います。この変更によっていくつのコードが壊れますか?コードがまったく影響を受けている場合、コードでこれを修正するのは大変な努力ですか?


参考までに、n3225の8.5.4/6を参照してください。

ナローイング変換は暗黙の変換です

  • 浮動小数点型から整数型へ、または
  • long doubleからdoubleまたはfloat、またはdoubleからfloat。ただし、ソースが定数式であり、変換後の実際の値が表現可能な値の範囲内にある場合(正確に表現できない場合でも)、または
  • 整数型またはスコープなし列挙型から浮動小数点型へ。ただし、ソースが定数式であり、変換後の実際の値がターゲット型に適合し、元の型に変換して元の値を生成する場合を除きます。
  • 整数型またはスコープなし列挙型から、元の型のすべての値を表すことができない整数型へ。ただし、ソースが定数式であり、変換後の実際の値がターゲット型に適合し、次の場合に元の値を生成する場合を除きます。元のタイプに変換されます。
0 投票する
2 に答える
1875 参照

c++ - C++ 11で集計の初期化が有効なのはいつですか?

次のコードがあるとしましょう。

ここで、構造体にAは自明ではないコンストラクターと、集合体ではないと思われるstd::stringメンバーの両方があるため、構造体は集合体ではないと思います。これはおそらくB、 も集合体ではないことを意味します。

それでも、initialize B を集約できます。さらに、これは、copy コンストラクターも move コンストラクターも呼び出されずに実行できます (例: C++0x GCC 4.5.1 on ideone )。

この動作は、特に安価な動きを持たない大きなスタック タイプを一緒に構成する場合に、便利な最適化のように思えます。

私の質問は、C++0x でこの種の集計初期化が有効になるのはいつですか?

編集 + フォローアップの質問:

以下のDeadMGは次のように答えました:

これは集合体の初期化ではなく、均一な初期化です。これは基本的に、この場合はコンストラクターを呼び出すことを意味し、コピーや移動はおそらく RVO と NRVO によって行われます。

B次のように変更すると、次のことに注意してください。

移動が実行されます。

したがって、これが単なる均一な初期化であり、コンストラクターを呼び出すだけで特別なことを何もしない場合、移動を省略できるコンストラクターをどのように作成すればよいでしょうか?

それとも、GCC は、有効な場合にここで移動を省略していないだけですか? もしそうなら、移動を省略できるコンパイラと最適化の設定はありますか?

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

c++ - C++ での集約初期化の安全性

次の構造体があるとします。

sampleDataそして、使用するときは、タイプの変数を既知の状態に初期化したいと考えています。

sampleData後で、次のように、構造体に追加のデータを格納する必要があると判断しました。

前のデータ構造から残された 2 つのフィールドの初期化は、zまだ有効なステートメントであり、コンパイルされることを理解しています。不足しているフィールドにデフォルト値を設定します。

この理解は正しいでしょうか?私は最近、集約の初期化も可能にする Ada で作業していますが、コンパイル エラーとして同様の問題にフラグを立てます。上記の C++ コードに関する私の仮定が正しいと仮定すると、不足している初期化値をエラーとして認識する言語構造はありますか?

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

c - 配列/構造体を初期化するためのなじみのない構文、説明を探す

OVP (qemu に似た製品) という会社が提供する「プロセッサ モデリング ガイド」を参照しています。その中には、次のような小さなコード スニペットがあります。

このような構文は今まで見たことがありません。 C++ に関する無関係なものを削除

現時点では、彼らのものをダウンロード/見て、何かがどのように定義されているかを確認する能力がありません。したがって、私の質問です。この構文を認識している場合は、検討していただけますか?


編集

or1kDispatchTableCは type のポインターの typedef ですが、or1kDispatchTableCP何が何であるかについてはまだ何もありませんor1kDispatchTableCP

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

c - 配列サイズよりも多くの初期化子がある場合の動作はどうなりますか?

配列サイズよりも多くの初期化子がある場合に何が起こるか知りたいです。例:

もちろん、私のコンパイラはそれを警告します。未定義の動作を期待していましたが、C11標準にはそれに関する句が見つかりませんでした。それで、私は何かを逃しましたか?

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

c++ - カスタム構造でboost::arrayを初期化する方法は?

boost::arrayカスタムのユーザー構造とデータを使用して静的を初期化する方法を探しています。私の例、boost::array以下に期待しているもの:

しかし、このコードは機能しませんでした。

私は何が欠けていますか?

ありがとう!

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

c++ - ={} 構文で構造体を初期化するとき、内部で何が起こっているのでしょうか?

editコメントに基づいて少し微調整された例

ちょっとしたコードと質問 (明確にするために、これは C++ の質問です):

ここにいくつかの質問があります:

  1. MyStruct1のインスタンスをその方法で初期化できるようにする魔法は何ですか
  2. c++98 でこれに対する回避策はありますか?

参考までに、スタックに割り当てられた構造体を強制的にゼロ初期化する手段としてコンストラクターを使用しようとしていますが、このスタイルの初期化を禁止したくありません。

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

c++ - C++11 で集約クラスをプライベートに継承するクラスの集約初期化

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

この行derived d{1, 2, 3};により、コンパイラ (Clang 3.3) が「「派生」の初期化に一致するコンストラクタがありません」というエラーで失敗します。どうしてこれなの?derived集計の初期化を介して初期化する方法はありますか?