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

C ++ 17は、2017年に承認されたC ++標準の名前です。これは、以前のC ++ 14標準に基づいて構築されており、コア言語と標準ライブラリを改善し、いくつかの新しい言語機能を追加しています。

1
C ++ 17の新機能は何ですか?
ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 C ++ 17の機能が完全になったため、大きな変更が発生する可能性はほとんどありません。何百もの提案がC ++ 17に対して提案されました。 C ++ 17でC ++に追加された機能はどれですか? 「C ++ 1z」をサポートするC ++コンパイラーを使用している場合、コンパイラーがC ++ 17に更新すると、これらの機能のうちどれが使用可能になりますか?
1007 c++  standards  c++-faq  c++17 


6
イテレーターの無効化ルール
C ++コンテナーのイテレーター無効化ルールとは何ですか? できれば要約リスト形式で。 (注:これはStack OverflowのC ++ FAQへのエントリになることを目的としています。このフォームでFAQを提供するという考えを批評したい場合は、これをすべて開始したメタへの投稿がそのための場所になります。回答その質問はC ++チャットルームで監視され、FAQのアイデアはそもそも最初から始まっているため、アイデアを思いついた人があなたの答えを読む可能性は非常に高いです。
543 c++  c++11  iterator  c++17  c++-faq 

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 

1
std :: launderの目的は何ですか?
P0137は、関数テンプレートstd::launderを導入し、 共用体、存続時間、およびポインターに関するセクションで標準に多くの多くの変更を加えます。 このペーパーが解決している問題は何ですか?私が認識しなければならない言語の変更は何ですか?そして、私たちは何をしているのlaunderですか?

5
std :: string_viewはconst std :: string&よりどのくらい正確に高速ですか?
std::string_viewはC ++ 17に対応しており、の代わりに使用することをお勧めしますconst std::string&。 その理由の1つはパフォーマンスです。 誰かが、パラメータタイプとして使用した場合よりも正確に std::string_view、または高速になると説明できますかconst std::string&?(呼び出し先にコピーが作成されていないと仮定しましょう)
221 c++  string  c++17  string-view 

4
何がi = i ++ + 1; C ++ 17で合法?
未定義の動作を叫ぶ前に、これはN4659(C ++ 17)に明示的にリストされています i = i++ + 1; // the value of i is incremented まだN3337(C ++ 11) i = i++ + 1; // the behavior is undefined 何が変わったの? 私が収集できるものから、[N4659 basic.exec]から 特に明記されていない限り、個々の演算子のオペランドおよび個々の式の部分式の評価は、シーケンスされていません。[...]演算子のオペランドの値計算は、演算子の結果の値計算の前にシーケンスされます。メモリロケーションへの副作用が同じメモリロケーションへの別の副作用または同じメモリロケーションにあるオブジェクトの値を使用した値の計算に関連してシーケンスされておらず、それらが潜在的に並行していない場合、動作は未定義です。 どこ [N4659 basic.type]で値が定義されている 自明にコピー可能な型の場合、値の表現はオブジェクト表現のビットのセットであり、 あり、実装で定義された一連の値の1つの個別の要素であるvalueます。 から [N3337 basic.exec] 特に明記されていない限り、個々の演算子のオペランドおよび個々の式の部分式の評価は、順序付けされていません。[...]演算子のオペランドの値計算は、演算子の結果の値計算の前にシーケンスされます。スカラーオブジェクトの副作用が、同じスカラーオブジェクトの別の副作用または同じスカラーオブジェクトの値を使用した値の計算に関連してシーケンスされていない場合、動作は未定義です。 同様に、値は [N3337 basic.type]ます 自明にコピー可能な型の場合、値の表現は、オブジェクトで表現された一連のビットであり、実装で定義された一連の値の1つの個別の要素であるvalueを決定します。 それらは重要ではない同時実行性の言及を除いて同一であり、スカラーオブジェクトの代わりにメモリロケーションを使用します。 算術型、列挙型、ポインター型、メンバー型へのポインターstd::nullptr_t、およびこれらの型のcv修飾バージョンは、まとめてスカラー型と呼ばれます。 これは例には影響しません。 [N4659 expr.ass] …

6
C ++ 11、14、17、または20は、piの標準定数を導入しますか?
CとC ++のpiの数値にはかなりばかげた問題があります。私が知る限り、でM_PI定義されてmath.hいることは、どの規格でも要求されていません。 新しいC ++標準では、標準ライブラリに複雑な数学の多くが導入されました-双曲線関数、std::hermiteおよびstd::cyl_bessel_i、さまざまな乱数ジェネレータなど。 「新しい」標準のいずれかがパイの定数をもたらしましたか?そうでない場合-なぜですか?この複雑な数学はそれなしでどのように機能しますか? 私はC ++のpiに関する同様の質問を認識しています(それらは数年前のものであり、標準から古くなっています); 問題の現状を知りたいのですが。 なぜ C ++にはまだpi定数がないのに、もっと複雑な数学がたくさんあるのか、という理由にも非常に興味があります。 UPD:自分でpiを4 * atan(1)またはacos(1)またはdouble pi = 3.14として定義できることを知っています。承知しました。しかし、なぜ2018年に私はまだそれをしなければならないのですか?標準の数学関数はpiなしでどのように機能しますか? UPD2:2019年7月にケルンで開催されたC ++委員会のこの出張レポートによると、提案P0631(数学定数)がC ++ 20に受け入れられました。つまり、ついに標準ライブラリに数piが含まれるようになります!

1
string_viewとは何ですか?
string_viewC ++ 17に追加されたC ++ Library Fundamentals TS(N3921)内で提案された機能でした。 私が理解している限り、それはある種の文字列「概念」を表すタイプであり、文字列として表示可能なものを格納できるあらゆるタイプのコンテナのビューです。 これは正解 ? 正規 const std::string&パラメータタイプは次のようになりstring_viewますか? string_view考慮すべきもう1つの重要な点はありますか?


9
ワンショットの「if」を書く最もエレガントな方法
C ++ 17以降ifでは、次のように1回だけ実行されるブロックを記述できます。 #include <iostream> int main() { for (unsigned i = 0; i < 10; ++i) { if (static bool do_once = true; do_once) { // Enter only once std::cout << "hello one-shot" << std::endl; // Possibly much more code do_once = false; } } } 私はこれを考えすぎているかもしれないことを知っています、そしてこれを解決する他の方法がありますが、それでも-このようにこれを書くことは可能であるためdo_once = false、最後にの必要はありませんか? …
136 c++  if-statement  c++17 

6
ラムダが自分自身を返す:これは合法ですか?
このかなり役に立たないプログラムを考えてみましょう: #include <iostream> int main(int argc, char* argv[]) { int a = 5; auto it = [&](auto self) { return [&](auto b) { std::cout << (a + b) << std::endl; return self(self); }; }; it(it)(4)(6)(42)(77)(999); } 基本的に、自分自身を返すラムダを作成しようとしています。 MSVCはプログラムをコンパイルし、実行します gccはプログラムをコンパイルし、segfaultします clangは次のメッセージでプログラムを拒否します。 error: function 'operator()<(lambda at lam.cpp:6:13)>' with deduced return type cannot …

3
インライン変数はどのように機能しますか?
2016年のOulu ISO C ++標準会議で、インライン変数と呼ばれる提案が標準委員会によってC ++ 17に投票されました。 簡単に言えば、インライン変数とは何ですか、どのように機能し、何に役立つのですか?インライン変数はどのように宣言、定義、使用する必要がありますか?
124 c++  c++17 


3
polymorphic_allocator:いつ、なぜ私はそれを使うべきですか?
ここでは上のドキュメントですcppreferenceは、ここでのワーキングドラフトです。 私は、本当の目的が何でpolymorphic_allocator、いつ/なぜ/どのように使用すべきかを理解していなかったことを認めなければなりません。 例として、にpmr::vectorは次の署名があります。 namespace pmr { template <class T> using vector = std::vector<T, polymorphic_allocator<T>>; } polymorphic_allocatorオファーは何ですか?std::pmr::vector昔ながらのものに関して同様にオファーは何std::vectorですか?今までできなかったことが、どうしたらいいですか? そのアロケータの本当の目的は何ですか、いつ実際に使用する必要がありますか?
120 c++  allocator  c++17 

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