問題タブ [c++20]

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 投票する
6 に答える
11879 参照

c++ - ポータブル分岐予測のヒント

分岐予測のヒントを実行するポータブルな方法はありますか?次の例を考えてみましょう。

これは行うことと何か違いがありますか?

または、コンパイラ固有のヒントを使用する唯一の方法ですか?(例:GCCの__builtin_expect)

コンパイラーifは、条件の順序に基づいて条件を異なる方法で処理しますか?

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

c++ - C ++ 11には、値パラメーターには暗黙の移動がありますが、右辺値パラメーターには暗黙の移動がないのはなぜですか?

C ++ 11では、値パラメーター(およびその他の値)は、返されるときに暗黙的な移動を楽しんでいます。

少なくともMSVC2010では、右辺値参照パラメーターには次のものが必要ですstd::move

内部関数、右辺値参照、および値は同様に動作しますが、値の場合は関数自体が破棄の責任を負い、右辺値参照の場合は外部の責任があるという唯一の違いがあると思います。

標準でそれらを異なる方法で扱う動機は何ですか?

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

c++ - C++ モジュールとは正確には何ですか?

私はC++の標準化を追跡しており、C++モジュールのアイデアに出くわしました。良い記事が見つかりませんでした。それは正確には何についてですか?

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

c++ - ジェネリック ラムダでのテンプレート パラメーターの使用

GCCでは、次の構文を拡張として使用できます。

汎用ラムダの 2012年提案であるn3418では、上記を可能にする構文が見られます。

ただし、これは拡張機能であるため、構文が明らかに存在しない (または許可されていない)。auto がある場合、上記はどのような状況で役立つでしょうか。また、構文が存在しない (または許可されていない) のはなぜですか?

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

c++ - 別のヘッダーを含めることが保証されている C++ 標準ライブラリのヘッダーはどれですか?

C++ 標準ライブラリ ヘッダーは、不特定の方法で相互にインクルードする可能性があるため、通常、プログラマは 1 つのヘッダーが別のヘッダーを含むことに依存するべきではありません。ただし、いくつかのケースでは、ヘッダーに別のヘッダーが含まれていることが保証されているか、そうでなければ別のヘッダーを含める必要がある特定の機能を利用できるようになっています。それらのケースは何ですか?

0 投票する
32 に答える
268415 参照

c++ - 最新の C++11 / C++14 / C++17 および将来の C++20 で列挙型から文字列へ

他のすべての同様の質問とは対照的に、この質問は新しい C++ 機能の使用に関するものです。

多くの回答を読んだ後、まだ何も見つかりませんでした:

多くの場合、例は長い説明よりも優れています。
このスニペットは、Coliruでコンパイルして実行できます。
別の以前の例も利用可能です)

制約

  • 他の回答基本的なリンクの価値のない複製はしないでください。
  • 肥大化したマクロベースの回答を避けるか、#defineオーバーヘッドを最小限に抑えるようにしてください。
  • マニュアルなしでお願いしますenum->stringマッピング。

あった方がよい

  • enumゼロ以外の数値から始まるサポート値
  • 負のenum値をサポート
  • 断片化されたenum値をサポート
  • サポートclass enum(C++11)
  • class enum : <type>許可されたすべてのサポート<type>(C++11)
  • コンパイル時 (実行時ではない) の文字列への変換、
    または少なくとも実行時の高速実行 (例:std::map良いアイデアではありません...)
  • constexpr(C++11、その後 C++14/17/20 で緩和)
  • noexcept(C++11)
  • C++17 / C++20に適したスニペット

variadic template class考えられるアイデアの 1 つは、C++ コンパイラ機能を使用して、および関数に基づくメタプログラミングのトリックを使用して、コンパイル時に C++ コードを生成するconstexprことです...

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

c++ - 条件付きで自明なデストラクタ

識別されたユニオン/タグ付きバリアントの発明「コンパイル時にいくつかの条件でデストラクタを自明にする」などの機能に特に必要があると結論付けています。私はある種のSFINAEまたは(疑似コード)のようなものを意味します:

つまり、条件がdefault(*)の場合true、デストラクタの定義は と等しくなります~X() = default;が、代わりfalse{ // ... }ボディが使用されます。

Uクラスをリテラル型にするこの例では (すべてが自明に破壊可能である場合)、クラス ( )first, rest...とほぼ同じものを定義できますが、デストラクタの定義は必要ありません(つまり、すべての下位型がリテラルの場合はリテラル型です)。 )。次に、テンプレート型エイリアスを定義しますUV~U

using tail = W< rest... >;との両方Uで再定義しVます。したがって、2 つのほぼ同一のクラスがあり、デストラクタの存在のみが異なります。上記のアプローチでは、コードを過度に複製する必要があります。

この問題は、割り当て可能な型を自明にコピー/移動すること、operator =および型が になる他のすべての条件にも関係していstd::is_trivially_copyableました。5 つの条件により、実装する合計 2^5 の組み合わせが得られます

私が見逃している現在のC ++で表現できる、すぐに使用できるテクニック(および冗長性が低く、上記のテクニックで説明されている)はありますか?

別の考えられるアプローチは、(言語機能) としてデストラクタをマークconstexprし、コンパイラに付与して、インスタンス化中に本体が単純なものと同等であるかどうかをテストすることです。

アップデート:

コメントで指摘されているように単純化されたコード: のようなクラスunionになりました。指定子をunion削除しました。noexcept

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

c++ - Clang で C++ モジュールを使用するにはどうすればよいですか?

モジュールは #includes の代替です。Clang には C++ の完全な実装があります。今 Clang を使用してモジュールを使用したい場合はどうすればよいですか?


使用する

モジュールの仕様 (構文を含む) が最終版ではないため、C++ ソース ファイル内の はまだ動作 (コンパイル) しません。


Clangのドキュメントには、フラグを渡す-fmodulesと #includes が適切なインポートに書き換えられることが記載されています。ただし、プリプロセッサをチェックすると、そうでないことが示唆されます (test.cpp に#include <stdio.h>は空のメインしか含まれていません)。

-fmodulesさらに、 vs フラグをまったく指定せずにこのテスト ファイルをコンパイルすると、同じオブジェクト ファイルが生成されます。

私は何を間違っていますか?