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

c++ - std :: make_pair vs C++11ユニフォームイニシャライザ

後者を使用することに欠点はありますか?より用途がstd::make_pair広い/互換性がありますか、それとも本当に互換性がありますか?

ありがとう!

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

c++ - 参照の均一な初期化

私は現在、C++0xの新しい統一初期化を理解しようとしています。残念ながら、参照の均一な初期化を使用することに困惑しました。例:

この例は正常に機能します。

Update Comeauはその例でエラーをスローするので、gccもそれをコンパイルすべきではないかもしれません)

ここで、整数の代わりにカスタムデータ型を使用すると、機能しなくなります。

残念ながら、標準ドラフトで関連するセクションが見つかりませんでした。コモーがこのメッセージで不平を言っているので、私は均一な初期化の使用法を誤解していると思います:

それで、あなたの誰かが私を正しい方向に向けることができますか?


この質問が関連する理由と、私が単に使用しない理由を知りたい場合Y &ref(y):コンストラクターの初期化リストで均一な初期化を使用できるようにしたいと思います:

これは失敗し、上記と同じエラーメッセージが表示されます。

ノート:

  • LANG=C英語のエラーメッセージを有効にするために使用しています。
  • gccバージョン:4.6.1
0 投票する
1 に答える
562 参照

c++ - const 参照へのデフォルト引数で使用される統一イニシャライザ

これは正当な c++0x 構文ですか?

もしそうなら、GCC 4.6 でバグを見つけたからです。

私が得るエラーは次のとおりです。

エラー: '{' トークンの前にプライマリ式が必要です

これは ... 論理的 ... それが違法だった場合。

更新: @Kerrek が説明したように、これは、集計とそれらの古いブレース初期化構文を使用して、プレーンな C++03 に流れ込みます。なぜこれが不可能なのですか?標準で禁止されていますか?それとも、コンパイラに問題がありますか? それともこれは見落としですか?明示的にコンストラクターを呼び出す代わりにこれを許可することに深刻な問題は見られません。

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

c++ - C++0x均一初期化「奇数」

多くの人と同じように、私はC++0xにかなり興奮しています。私は、新しいプロジェクトで新機能を学び、使用して、可能な限り最高の、最も保守しやすいコードを記述できるようにしています。

言うまでもなく、私は新しいイニシャライザーの背後にあるアイデアが大好きです。だから私はそれらを見ています、そしてこれらは私にとって理にかなっています:

私には意味がないのはこれです:

それはただ...奇妙に感じます。人々がどの構文を使用したいのか、これが模倣しているのかわかりません。単に「正しく」ないようです。

この構文の背後にある設計/考えは何ですか?

それが違いを生むように見える唯一の例は、次のようなものです。

これは初期化リストコンストラクターを呼び出しますが、なぜこれを書いてみませんか?

そして、誰もがすでに快適なことをしますか?

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

initialization - How to "reduce typing to create C++ types" with Uniform Initializers?

I have played a lot the new Uniform Initialization with {}. Like this:

It is undisputed that this initialization may change we program C++. But I wonder if I missed some of the magic possibilities when reading Alfonses's question in the Herb Sutter FAQs.

Alfonse: Uniform initialization (the use of {} to call constructors when the type being constructed can be deduced) has the potential to radically reduce the quantity of typing necessary to create C++ types. It's the kind of thing, like lambdas, that will change how people write C++ code. [...]

Can someone give me an example of what Alfonse exactly envisions here?

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

c++ - C++11 統一初期化構文の使用方法

C++11 で新しい統一初期化構文をいつ、どのように使用すればよいかわかりません。
たとえば、次のようになります。

2番目のケースで機能しないのはなぜですか? エラーは次のとおりです。

このバージョンの g++ でg++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2

また、プリミティブ データでは、どの構文を使用すればよいでしょうか?

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

c++ - std::allocator での直接と均一の初期化

この質問は、より適切な Usenet にも送信されていますが、これはより大規模で信頼性の高いフォーラムです。

std::allocator::constructは、引数パラメータ パックを括弧を使用してオブジェクト構築に転送するように定義されています (別名、直接初期化)。

中かっこ、つまり均一な初期化を使用するstd::make_sharedと、 や などの関数から集約データ型を初期化できますcontainer::emplace。また、イニシャライザ リストの内容をそのような関数の引数リストに入れ、initializer_list転送時の型推定の問題を解決することもできます。

この代替案は考慮され、却下されましたか? 将来の規格に切り替えるには遅すぎますか? これは重大な変更になるようですが、特に凶悪なものではありません。

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

c++ - MSVC10/11で統一された初期化子が欠落している場合のマクロ/インライン関数の回避策

実際の機能を使用せずに、均一な初期化子で行うのと同様のスタイルでコーディングするのを容易にする半透明の方法はありますか?

均一な初期化子の型安全性やその他の制約を放棄するつもりですが(他のコンパイラーでそれらの妥当性を確認します)、次のような優れたステートメントを放棄したくありません。

これらを不均一なイニシャライザー対応コンパイラーの互換性のあるコードに変換するマクロは、私にとって非常に役立ちます。

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

c++ - emplace_back() が一様な初期化を使用しないのはなぜですか?

次のコード:

GCC でコンパイルすると、次のエラーが発生します。

vector引数から への要素を構築するために、通常()のコンストラクタ構文を使用していることを示唆していますemplace_back()。上記のような例を機能させるために、代わりに均一初期化構文をvector使用しないのはなぜですか?{}

使用することで失うものは何もないように思えます{}(コンストラクターがある場合はコンストラクターを呼び出しますが、コンストラクターがない場合でも機能します) {}。すべて、均一な初期化の要点は、オブジェクトを初期化するために均一に、つまりどこでも使用されることです。

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

c++ - なぜ 'std::vectorb{2};' 2要素ベクトルではなく、1要素ベクトルを作成しますか?

ここ数日、C++11 をいじっていて、奇妙なことを思いつきました。

int を均一に初期化したい場合:

しかし、std::vector に対して同じことを行うと、次のようになります。

2 要素の配列を構築するのではなく、値 2 の 1 つの要素を持つ配列を構築します。それについてもっと明確にする必要があるという効果が得られるようです:

しかし、b の宣言とは異なります。これは矛盾しているようです。私は同じ効果を持つ他のものを見てきました。私が尋ねているのは、この動作は最終的な C++11 標準での動作ですか、それとも初期に実装されたドラフトだけでしょうか? もしそうなら、なぜ標準化委員会はこの動作を含めたのですか? どのクラスがイニシャライザ リスト コンストラクタを持っているかを覚えておく必要があり、それらのクラスだけで {} の代わりに古い () 構文を使用する必要があるため、均一な初期化の目的全体が無効になっているようです。または、均一な初期化を完全に放棄します。

これは大きな「落とし穴」のようです。しかし、私が気づいていない利点があるかもしれません。

編集:このコード:

gcc 4.6.2 で「2」を出力する