問題タブ [c++17]
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++ での N 変数の範囲/ループ
操作を実行するために、それぞれ任意のタイプの N 個の変数を範囲指定する簡潔な方法は何ですか?
a
変数、b
、c
、がありd
、e
何らかの操作を実行してそれらすべてを調べたいとしましょう。
c++ - 「簡潔な範囲ベースの for ループ」とは何ですか?
clang はn3994から簡潔な範囲ベースの for ループの実装を開始しました。範囲ベースの for ループを導入する場合、不必要なコピーを避けるために の形式のコードがよく見られます。n3994はあらゆる点で優れていると提案しているようです。いくつかの質問を聞きたいんです:for (auto & v : vector)
for (auto && v : vector)
- 後者の形式は前者よりもどのような利点がありますか? 後者が明らかに有利であるのに、なぜ私たちは通常
auto &
代わりにそれを採用するのでしょうか?auto &&
auto &&
新しい ranged-for ベースのループを作成することは、既存のコードを壊すことと同等ですか? それは新しいコードに実際の影響を与えるでしょうか?- これは、コードが実際に同等である初心者に落とし穴をもたらしません
auto &&
か?
c++ - initializer_list を持つオプションのコンストラクター
この特別なコンストラクターが初期化子リストを取得する目的は何ですか。誰かがこれがいつ役立つかの例を挙げてもらえますか?
上記はこれとどう違うのですか?
参照: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3793.html#optional.object.ctor
PS c++14 または c++1z タグを使用するかどうかはわかりません。C++ 技術仕様のタグが必要だと思います
c++ - constexpr インデックスがあってもコンパイラが範囲外の配列アクセスを許可するのはなぜですか?
たとえば、 があり、コンパイラstd::array
を使用して範囲外の要素をインスタンス化しても、constexpr
エラーは報告されません。
これをどうにか制限できないでしょうか?
c++ - 任意の callable で式を折りたたむ?
折り畳みに関するC++17 の論文(およびcppreferenceに関するもの) を見てみると、なぜ演算子のみで動作するように選択されたのかについて混乱していますか? 一見すると、 の要素の間にトークンを(... + args)
押し込むだけで簡単に拡張できるように見えますが、これが素晴らしい決定であるとは確信が持てません。 +
args
バイナリ ラムダ式が同様に機能し、上記の後者と同じ展開ができないのはなぜですか? 任意の callable をサポートせずに折り畳み構文が言語に追加されることは私には不快です。
更新:min()
これは、clangを使用した可変引数関数で機能します
c++ - 固定サイズ配列の非メンバー std::empty オーバーロードの戻り値
[承認された] 標準文書N4280は、C++17 に折りたたまれるいくつかの新しい非メンバー関数を追加します。
新しい非メンバー関数のそれぞれの適切な戻り値を示すコメントがあり、特に、std::empty
固定サイズの配列のオーバーロードは私を混乱させます。false
この論文は、そのオーバーロードの戻り値が常に;になることを示唆しています。すべての固定サイズの配列が空になることはありません。
なぜこれが当てはまるのでしょうか?私の知る限りでは、(おそらく役に立たないかもしれませんが) のようにサイズがゼロの配列を持つことは可能ですint x[0];
。これを空と呼びます。
参考までに、私が話している特定のオーバーロードは次のとおりです。