問題タブ [list-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++11 リスト初期化の異なる動作
次のコードを検討してください。
ここで、リストの初期化を使用して A の配列を初期化したいと思います。g++ (4.9.1) は、次のコードを正常にビルドできました。
ただし、次のコードでは失敗しました。
エラーメッセージは、
つまり、リスト初期化子は、クラス内の配列を初期化するために移動コンストラクターを呼び出そうとします。ただし、そのコードは、clang v3.5 によって警告なしで正常にビルドされました。ですから、C++11 (またはそれ以降のバージョン) がリストの初期化に関してどのような規則を指定しているかを知りたいです。前もって感謝します。
c++ - リスト初期化で集約型を値初期化する方法
リスト初期化構文を使用してC++ 14で集約型を値初期化するにはどうすればよいですか?
これは集合体の初期化と見なされ、 の初期化されていないメンバーに対してエラーまたは警告が生成されますAggregate_t
。
これはまったく可能ですか?
編集:例
g++-4.9.2 でコンパイル:
c++ - C ++のサブクラスのコンストラクターでスーパークラスのconstメンバー変数を初期化する方法は?
次のような状況があります。スーパークラスconst
のメンバーを宣言しましたが、リスト初期化子を使用して、そのサブクラスの 1 つのコンストラクター内で初期化したいと考えています。
これが可能かどうかはわかりません。上記の簡単な方法を使用すると、コンパイラは次のメッセージを表示します。
この回答は、サブクラスのコンストラクターのリスト初期化子でスーパークラスのメンバー変数を初期化できない理由を説明しています。そのような状況でのベストプラクティスは何だろうかと思いますか?
c++ - C++14: `void` にブレースを使用できないのはなぜですか?
シンプルで効率的な SFINAE 選択decltype
を使用することは (少なくとも私のコードでは) 非常に一般的です。std::enable_if_t
次のようなもの:
ただし、何らかの理由で有効ではないため (少なくとも Clang と GCC では)、これをvoid{}
書くことはできません。()
std::enable_if_t
何故ですか?
c++ - 関数呼び出しによる波括弧または等しい初期化
良い習慣ではないと思いますが、私が使用しているコンパイラ (GNU と clang の両方) では、次のようなものが許可されているようです。
つまり、完全に関係のない関数を呼び出すことによってブレースまたはイコールの初期化が行われる場合です。
これは正しく、標準で許可されていますか? の実行によって最終的にもたらされる付随効果についてはどうf()
ですか?
c++ - 転送されたインプレース構築とリストの初期化
転送されたインプレース構築とは、std::allocator::constructとさまざまな emplace メソッド ( std::vector::emplace_back など) を意味します。C++ で転送されたインプレース構築では、リスト初期化構文を利用していない (できない?) ことがわかりました。その結果、集約をインプレースで構築することは決してできないようです。転送されたインプレース構築がリストの初期化をサポートしていないため、集計型がサポートされていないかどうかを確認したいだけです。これは言語の制限によるものですか?誰かがこの問題に関する標準への参照を提供できますか? 以下に図を示します。
直接のようにインプレース構築を行うことができますが、
次のような転送されたインプレース構築はできません
c++ - デフォルトの初期化子リスト コンストラクターを有効にする
現代の C++ イニシャライザ リストは、オブジェクトを初期化するのに非常に便利であり、独自のコンストラクタを定義する必要がなくなると考えています。
ただし、クラスが別のクラスから継承されている場合、これは機能しません。
ポイントクラスに追加しようとしpoint() = default;
ましたが、それもうまくいきませんでした。初期化子リストでポイントを初期化するにはどうすればよいですか?