問題タブ [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++ - clang 3.6倍式 左/右
clang 3.6 '--std=c++1z' でフォールド式を試していますが、うまくいきません。私がテストしている機能は次のとおりです。
n4191によると、左に折りたたむと展開されると予想しています
これは結果 5 を与えますが、結果は 9 です。
n4191 を何か見逃しているか、誤解していますか? ありがとう
c++ - f & g が同じグローバル変数を未定義または未指定に変更するとき、式 f() > g() の値は?
更新: ユーザーecatmurによってマークされているように、それはIn C99, is f()+g() undefined or単に unspecified?の複製です。(質問はC99について尋ねますが、答えはC ++では変わりません)。答えは未指定です (どちらの場合も)。
次の C++14 コード フラグメントを検討してください。
の値が指定されていz ないだけですか、それとも未定義の動作ですか?
私の理解によると (私が間違っている場合は修正してください)、種類の式:i++ > i++シーケンスポイントのペア間で同じ変数を2回変更しているため、未定義の動作になりますが、上記の場合はどうなりますか (突然変異が別々に発生する場合)機能) ?
そして、これはどうですか:
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++ - 関数の戻り値からの移動によるブレースの初期化により、「過剰な要素」エラーが発生する
次のコード スニペットがあるとします。
の単一行がの戻り値で の移動コンストラクターを使用mainして宣言および定義/初期化することを期待します。myFooFoomakeFoo()
clang++ただし、 3.5.1 (C++14 モードでコンパイル)から次のエラーが発生します。
何が起きてる?「構造体初期化子」とは正確には何を意味しますか?それは POD のデフォルト (引数なし) コンストラクターですか? move コンストラクターが呼び出されないのはなぜですか?
c++ - テンプレート関数と自動型推定のどちらかを選択
テンプレート関数と関数の自動型推定に関する一般的な質問があります。
何年もの間、テンプレート関数を書くことができました:
関数のパラメーター推定に auto を使用するための TS があります
私は auto を使用していましたが、実際の型にアクセスしたり、たとえば静的メンバーを使用したりする方法はありませんでしたが、これはうまく機能します:
では、どちらかを選択する理由はありますか?