問題タブ [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.
c++ - 基本型の統一初期化構文?
これは有効な構文ですか? オブジェクトまたは非自明な型に中括弧初期化子が使用されている例しか見つかりません。
c++ - この例でエラー C2797 が発生するのはなぜですか?
次のコードがあります。
MSVC2013 Update 3 でコンパイルすると、C2797 エラーが発生します。中括弧を括弧 (つまりx_(x)
) に置き換えると、プログラムは正常にコンパイルされます。
なぜこれが起こるのですか?このコンパイラの動作は C++11 に準拠していますか? C++14 はどうですか?
編集:より明確にするために、x_{x}
上記が標準に従って呼び出すX(std::initializer_list)
必要があるかどうか、またはそれが呼び出しの有効な構文であるかどうかはわかりませんX(const X&)
。私の知る限り、後者です。私は正しいですか?
c++11 - 一様に初期化された参照を返すことは有効ですか?
このコード サンプルは有効ですか?
のようだ:
- clang 3.5はYESと言います
gcc 4.9はNOと言います
/li>
http://coliru.stacked-crooked.com/a/cb6604b81083393f
では、どのコンパイラが正しいのでしょうか? またはそれは指定されていませんか?
非常に簡単なので、次の方法で gcc ビルド エラーを克服します。
中括弧の代わりに括弧を使用する
/li>戻り値に名前を付ける
/li>
オプション 1. 一様な初期化を中断し、オプション 2. 無駄なコード行を追加します。
同様の質問がすでにここで聞かれました: なぜ一様な初期化でイニシャライザ リストの参照を初期化できないのですか?
ただし、前述の pr50025 は gcc 4.9 で修正されています。
上記のコード サンプルが役に立たないことはわかっていますが、問題を指摘するために意図的に単純化しすぎています。実際のコードの問題は、次のような一般的な関数に隠されている可能性があります。
c++ - std::make_map? 均一な初期化
以下の作品:
以下はしません:
追加の変数を使用せずに、make_tuple で作成されたタプル内のマップを初期化する方法はありますか?
c++ - なぜ地図なのかm={{1,2},{3,4},{5,0}}; サイズ3じゃなくて1?
非常に独特です:
プリントアウト
13
c++ - C++14: `void` にブレースを使用できないのはなぜですか?
シンプルで効率的な SFINAE 選択decltype
を使用することは (少なくとも私のコードでは) 非常に一般的です。std::enable_if_t
次のようなもの:
ただし、何らかの理由で有効ではないため (少なくとも Clang と GCC では)、これをvoid{}
書くことはできません。()
std::enable_if_t
何故ですか?