タグ付けされた質問 「c++20」

C ++ 20は、C ++ 17以降のバージョンのC ++のターゲットです。このタグは、C ++ 20で予定されているC ++機能に関する質問には(C ++タグとともに)使用する必要があります。

28
最新の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 ++ …
354 c++  string  enums  c++17  c++20 

2
「スパン」とは何ですか。いつ使用する必要がありますか。
最近span<T>、コードでを使用するよう提案するか、サイトでを使用するいくつかの回答を見ましたspan。ある種のコンテナだと思われます。しかし、私はC ++ 17標準ライブラリでそのようなものを見つけることができません。 では、この不可解なspan<T>とは何か、そしてそれが非標準である場合、なぜ(またはいつ)使用するのが良いのでしょうか?

3
C ++の<=>演算子とは何ですか?
私は学ぶしようとしたが、C ++の演算子、私は上の奇妙な比較演算子につまずいcppreference.com、*このように見えたテーブルに: 「そうですね、これらがC ++の一般的な演算子であるなら、私はそれらをよりよく学ぶ」と私は考えました。しかし、この謎を解明しようとする私の試みはすべて失敗しました。ここでも、Stack Overflowでは検索がうまくいきませんでした。 &lt;=&gt;とC ++の間に関係はありますか? そして、ある場合、この演算子は正確に何をしますか? *その間、cppreference.comがそのページを更新し、&lt;=&gt;オペレーターに関する情報が含まれるようになりました。

5
なぜrequireが必要なのですか?
C ++ 20の概念の隅の1つは、作成しなければならない特定の状況があることですrequires requires。たとえば、[expr.prim.req] / 3の次の例: Aは必要-発現はまた、で使用することができ、必要句下記のようなテンプレート引数にアドホック制約を書き込む方法として([TEMP]): template&lt;typename T&gt; requires requires (T x) { x + x; } T add(T a, T b) { return a + b; } 最初のrequireはrequire-clauseを導入し、2番目はrequire-expressionを導入します。 その2番目のrequiresキーワードが必要になる背後にある技術的な理由は何ですか?書き込みを許可できないのはなぜですか。 template&lt;typename T&gt; requires (T x) { x + x; } T add(T a, T b) { return a + …
161 c++  c++-concepts  c++20 

2
C ++ 20は、ファイルに格納されるソースコードを義務付けていますか?
しかし、少し奇妙な質問ですが、私が正しく覚えていれば、C ++ソースコードでは、ファイルシステムにファイルを格納する必要はありません。 カメラを介して手書きの紙をスキャンするコンパイラーがあれば、適合実装になります。実際にはそれほど意味がありませんが。 ただし、C ++ 20はでソースの場所を追加しfile_nameます。これは、ソースコードを常にファイルに保存する必要があることを意味しますか?


3
C ++ 20のコルーチンとは何ですか?
コルーチンとは c ++ 20? 「Parallelism2」または「および/または」「Concurrency2」(下記の画像をご覧ください)とはどのように異なりますか? 以下の画像はISOCPPからのものです。 https://isocpp.org/files/img/wg21-timeline-2017-03.png
104 c++  coroutine  c++20 

2
C ++ 20でstd :: ssize()が導入されたのはなぜですか?
C ++ 20std::ssize()は以下のように無料関数を導入しました: template &lt;class C&gt; constexpr auto ssize(const C&amp; c) -&gt; std::common_type_t&lt;std::ptrdiff_t, std::make_signed_t&lt;decltype(c.size())&gt;&gt;; 可能な実装はcl ass Cのメンバー関数のstatic_cast戻り値を対応する符号付きに変換するためにを使用しているようです。size() size()C のメンバー関数は常に非負の値を返すので、なぜ誰かがそれらを符号付き変数に格納したいのでしょうか?本当に望んでいる場合、それは単純な問題ですstatic_cast。 なぜstd::ssize()C ++ 20で導入されたのですか?
99 c++  stl  unsigned  signed  c++20 

4
C ++ 14にすでに汎用ラムダがある場合に、C ++ 20に導入されたテンプレートラムダの必要性は何ですか?
c ++ 14 以下を書くことを可能にする一般的なラムダを導入しました: auto func = [](auto a, auto b){ return a + b; }; auto Foo = func(2, 5); auto Bar = func("hello", "world"); このジェネリックなラムダはfunc、テンプレート関数funcが機能するのと同じように機能することは明らかです。 C ++委員会が汎用ラムダのテンプレート構文を追加することにしたのはなぜですか?

2
C ++ 20までのint未定義の動作にmallocを使用しています
次のコードはC ++ 20まで未定義の動作をしていると言われました。 int *p = (int*)malloc(sizeof(int)); *p = 10; 本当? 引数は、intオブジェクトに値を割り当てる前にオブジェクトの存続期間が開始されないというものでした(P0593R6)。問題を解決するには、配置newを使用する必要があります。 int *p = (int*)malloc(sizeof(int)); new (p) int; *p = 10; オブジェクトの存続期間を開始するために、簡単なデフォルトのコンストラクターを呼び出す必要が本当にありますか? 同時に、コードは純粋なCで未定義の動作をしません。しかし、intCコードでを割り当て、それをC ++コードで使用するとどうなりますか? // C source code: int *alloc_int(void) { int *p = (int*)malloc(sizeof(int)); *p = 10; return p; } // C++ source code: extern "C" int *alloc_int(void); …

3
等値演算子は、C ++ 20のカスタム宇宙船演算子の実装に対して定義されていません
&lt;=&gt;C ++ 20の新しい宇宙船オペレーターで奇妙な動作に遭遇しています。Visual Studio 2019コンパイラをで使用してい/std:c++latestます。 このコードは期待どおりに正常にコンパイルされます。 #include &lt;compare&gt; struct X { int Dummy = 0; auto operator&lt;=&gt;(const X&amp;) const = default; // Default implementation }; int main() { X a, b; a == b; // OK! return 0; } ただし、Xを次のように変更すると、 struct X { int Dummy = 0; auto operator&lt;=&gt;(const X&amp; …

2
多くの標準ライブラリタイプのC ++ 20でoperator!=が削除されるのはなぜですか?
cppreferenceによると、std::type_info::operator!=C ++ 20で削除されますが、std::type_info::operator==明らかに残っています。 背後にある理由は何ですか?不平等を比較することは無意味であることに同意するかもしれませんが、平等を比較することも同様に無意味ですよね? 同様に、operator!=などの容器を含む他の多くの標準ライブラリの種類のstd::unordered_map::operator!=とstd::unordered_set::operator!=cppreferenceに従って20 C ++で除去されます。 書き込みに持つことif(!(id1 == id2))に比べて任意のコードがどの明確にしないif(id1 != id2)だけで、反対、対照的に、...


2
C ++ 20の指定イニシャライザ
c ++ 20機能の1つである指定イニシャライザについて質問があります(この機能の詳細はこちら) #include &lt;iostream&gt; constexpr unsigned DEFAULT_SALARY {10000}; struct Person { std::string name{}; std::string surname{}; unsigned age{}; }; struct Employee : Person { unsigned salary{DEFAULT_SALARY}; }; int main() { std::cout &lt;&lt; std::boolalpha &lt;&lt; std::is_aggregate_v&lt;Person&gt; &lt;&lt; '\n'; // true is printed std::cout &lt;&lt; std::boolalpha &lt;&lt; std::is_aggregate_v&lt;Employee&gt; &lt;&lt; '\n'; // true …

3
明示的な(ブール)のユースケースは何ですか
C ++ 20 は、コンストラクターが明示的にされているかどうかをコンパイル時に条件付きで選択する明示的な(ブール値)を導入しました。 以下は私がここで見つけた例です。 struct foo { // Specify non-integral types (strings, floats, etc.) require explicit construction. template &lt;typename T&gt; explicit(!std::is_integral_v&lt;T&gt;) foo(T) {} }; foo a = 123; // OK foo b = "123"; // ERROR: explicit constructor is not a candidate (explicit specifier evaluates to true) foo c …
24 c++  c++20  explicit 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.