問題タブ [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++: 中括弧を使用して代入中の縮小を防止
変数を初期化するときの狭小化を防ぐために中括弧/初期化子リストを使用することに慣れていますが、変数に値を代入するときにも使用することをお勧めしますか?
例えば
割り当てに中括弧を使用しない理由はありますか?
c++ - c++11 の均一な初期化が "g++ -std=c++0x" で機能しない
このパブリック メソッドを宣言するクラスがあります。
{}
これは、c++ 11 の機能である均一な初期化 (ここでは単に) を使用します。でコンパイルするとき、これは私に何の問題も与えませんclang++ -std=c++11
。しかし、私が使用するg++ -std=c++0x
と、これが得られます:
この-std=c++0x
オプションは c++11 のサポートをもたらすはずではありませんか?
次のように標準の C++ を使用してメソッドを宣言しても、コンパイラはエラーを表示しません。
Ubuntu 12.04 で g++ 4.6 を使用しています
c++ - 引数を転送するときに () または {} を使用する必要がありますか?
私は次のクラスを持っています:
そして、次のように引数を転送したいと思います。
出力を に置き換える{}
と、代わりに.()
1 1 2
2 1 1
私のクラスにとって最も理にかなっているのはどれですか?
c++ - std::make_unique などの std::initializer_list オーバーロードが存在しないのはなぜですか?
引数を転送するときに () または {} を使用する必要がありますか? を参照してください。. クローンですfoo
。std::vector
N4140 では、unique.ptr.create std::make_unique
は次のように指定されます。
template <class T, class... Args> unique_ptr<T> make_unique(Args&&... args);
備考: この関数は
T
、 が配列でない限り、オーバーロードの解決に参加しません。戻り値:
unique_ptr<T>(new T(std::forward<Args>(args)...))
.
つまり、実装はオブジェクトを初期化するの()
ではなく、使用する必要があります。{}
例として、以下
が出力されます312
が、{}
(inside std::make_unique
) が使用された場合211
は出力されます。初期化子リストは推測できないstd::initializer_list
ため、後者の結果を取得するには、明示的に渡す必要があります。問題は、なぜこのようなオーバーロードが提供されないのかということです。
出力し211
ます。
「自分で書ける」とか「標準を肥大化させないため」という理由はあまり正当な理由とは思えません。この過負荷を提供することの欠点はありますか?
c++ - std::move で不要な変換が発生する
次のコードContainer
で型のオブジェクトから型のオブジェクトに変換しようとしているとコンパイラが考えるのはなぜですか? ブレース付きコンストラクターが変数MoveTest
に転送されるのはなぜですか? move_things
もちろん、をに置き換える{}
と()
問題が解決します
私が得るエラーは次のとおりです
これは、統一された初期化構文が、? を持つクラスのオプションではなくなったことを意味しますstd::array
か?
私が使用しているコンパイラとバージョンは
c++ - C++ - std::string を使用した均一な初期化子
C++の文字列クラスで統一イニシャライザを試しています。以下はコードです:
出力は次のようになります。
これには頭を悩ませました。str2
として望ましい結果を達成できないのはなぜstr3
ですか?