問題タブ [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.
c++ - ポータブル分岐予測のヒント
分岐予測のヒントを実行するポータブルな方法はありますか?次の例を考えてみましょう。
これは行うことと何か違いがありますか?
または、コンパイラ固有のヒントを使用する唯一の方法ですか?(例:GCCの__builtin_expect)
コンパイラーif
は、条件の順序に基づいて条件を異なる方法で処理しますか?
c++ - C ++ 11には、値パラメーターには暗黙の移動がありますが、右辺値パラメーターには暗黙の移動がないのはなぜですか?
C ++ 11では、値パラメーター(およびその他の値)は、返されるときに暗黙的な移動を楽しんでいます。
少なくともMSVC2010では、右辺値参照パラメーターには次のものが必要ですstd::move
。
内部関数、右辺値参照、および値は同様に動作しますが、値の場合は関数自体が破棄の責任を負い、右辺値参照の場合は外部の責任があるという唯一の違いがあると思います。
標準でそれらを異なる方法で扱う動機は何ですか?
c++ - C++ モジュールとは正確には何ですか?
私はC++の標準化を追跡しており、C++モジュールのアイデアに出くわしました。良い記事が見つかりませんでした。それは正確には何についてですか?
c++ - 別のヘッダーを含めることが保証されている C++ 標準ライブラリのヘッダーはどれですか?
C++ 標準ライブラリ ヘッダーは、不特定の方法で相互にインクルードする可能性があるため、通常、プログラマは 1 つのヘッダーが別のヘッダーを含むことに依存するべきではありません。ただし、いくつかのケースでは、ヘッダーに別のヘッダーが含まれていることが保証されているか、そうでなければ別のヘッダーを含める必要がある特定の機能を利用できるようになっています。それらのケースは何ですか?
c++ - 最新の C++11 / C++14 / C++17 および将来の C++20 で列挙型から文字列へ
他のすべての同様の質問とは対照的に、この質問は新しい C++ 機能の使用に関するものです。
- 2008 c C++ 列挙型を文字列に変換する簡単な方法はありますか?
- 2008 c C で列挙型の変数を文字列として使用する簡単な方法は?
- 2008 c++ c++列挙型を文字列に簡単にマップする方法
- 2008 c++ 何かを C 識別子と文字列の両方にしますか?
- 2008 c++ C++ 列挙型を文字列に変換する簡単なスクリプトはありますか?
- 2009 c++ C++ で列挙型をフラグとして使用する方法は?
- 2011 c++ 列挙型変数を文字列に変換する方法は?
- 2011 c++ 列挙型から文字列への C++
- 2011 c++ 列挙型変数を文字列に変換する方法は?
- 2012 c c で列挙名を文字列に変換する方法
- 2013 c C で条件付きでコンパイルされた列挙型を文字列化する
多くの回答を読んだ後、まだ何も見つかりませんでした:
- C++11、C++14またはC++17の新機能を使用したエレガントな方法
- またはBoostですぐに使えるもの
- その他、 C++20向けに計画されているもの
例
多くの場合、例は長い説明よりも優れています。
このスニペットは、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
ことです...
c++ - 条件付きで自明なデストラクタ
識別されたユニオン/タグ付きバリアントの発明「コンパイル時にいくつかの条件でデストラクタを自明にする」などの機能に特に必要があると結論付けています。私はある種のSFINAEまたは(疑似コード)のようなものを意味します:
つまり、条件がdefault(*)
の場合true
、デストラクタの定義は と等しくなります~X() = default;
が、代わりfalse
に{ // ... }
ボディが使用されます。
U
クラスをリテラル型にするこの例では (すべてが自明に破壊可能である場合)、クラス ( )first, rest...
とほぼ同じものを定義できますが、デストラクタの定義は必要ありません(つまり、すべての下位型がリテラルの場合はリテラル型です)。 )。次に、テンプレート型エイリアスを定義しますU
V
~U
using tail = W< rest... >;
との両方U
で再定義しV
ます。したがって、2 つのほぼ同一のクラスがあり、デストラクタの存在のみが異なります。上記のアプローチでは、コードを過度に複製する必要があります。
この問題は、割り当て可能な型を自明にコピー/移動すること、operator =
および型が になる他のすべての条件にも関係していstd::is_trivially_copyable
ました。5 つの条件により、実装する合計 2^5 の組み合わせが得られます。
私が見逃している現在のC ++で表現できる、すぐに使用できるテクニック(および冗長性が低く、上記のテクニックで説明されている)はありますか?
別の考えられるアプローチは、(言語機能) としてデストラクタをマークconstexpr
し、コンパイラに付与して、インスタンス化中に本体が単純なものと同等であるかどうかをテストすることです。
アップデート:
コメントで指摘されているように単純化されたコード: のようなクラスunion
になりました。指定子をunion
削除しました。noexcept
c++ - Clang で C++ モジュールを使用するにはどうすればよいですか?
モジュールは #includes の代替です。Clang には C++ の完全な実装があります。今 Clang を使用してモジュールを使用したい場合はどうすればよいですか?
使用する
モジュールの仕様 (構文を含む) が最終版ではないため、C++ ソース ファイル内の はまだ動作 (コンパイル) しません。
Clangのドキュメントには、フラグを渡す-fmodules
と #includes が適切なインポートに書き換えられることが記載されています。ただし、プリプロセッサをチェックすると、そうでないことが示唆されます (test.cpp に#include <stdio.h>
は空のメインしか含まれていません)。
-fmodules
さらに、 vs フラグをまったく指定せずにこのテスト ファイルをコンパイルすると、同じオブジェクト ファイルが生成されます。
私は何を間違っていますか?