C ++ 17の機能が完全になったため、大きな変更が発生する可能性はほとんどありません。何百もの提案がC ++ 17に対して提案されました。
C ++ 17でC ++に追加された機能はどれですか?
「C ++ 1z」をサポートするC ++コンパイラーを使用している場合、コンパイラーがC ++ 17に更新すると、これらの機能のうちどれが使用可能になりますか?
C ++ 17の機能が完全になったため、大きな変更が発生する可能性はほとんどありません。何百もの提案がC ++ 17に対して提案されました。
C ++ 17でC ++に追加された機能はどれですか?
「C ++ 1z」をサポートするC ++コンパイラーを使用している場合、コンパイラーがC ++ 17に更新すると、これらの機能のうちどれが使用可能になりますか?
回答:
[*this]{ std::cout << could << " be " << useful << '\n'; }using属性に属性の名前空間を繰り返すことを避けるために。
コンパイラは、認識しない標準以外の属性を無視する必要があります。
static_assert(expression);文字列なしのシンプルな
ないthrow限りthrow()、そしてそうthrow()ですnoexcept(true)。
std::tieとautoconst auto [it, inserted] = map.insert( {"foo", bar} );itを作成insertedし、pairそれからmap::insert返されるから推定型を使用します。std::arrayと比較的フラットな構造体で動作しますif (init; condition) そして switch (init; condition)
if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)if(decl)場合に適切に拡張しdeclます。いくつかの変更を加えた(一部の)式の評価順序を修正
.then、将来の作業に役立てます。フォワードプログレスギャランティ(FPG)(また、並列アルゴリズムの FPG )
u8'U', u8'T', u8'F', u8'8' 文字リテラル(すでに存在する文字列)
継承されたコンストラクターが一部のケースを修正しました(動作変更の例については、P0136R0を参照してください)
std::string 文字配列への参照または部分文字列のようにstring const&。また、何十億倍も速く解析することができます。"hello world"svchar_traitsstd::byte 彼らがかむことができるよりも多くオフ。
std::invoke
std::apply
std::make_from_tuple、std::applyオブジェクト構築に適用
is_invocable、is_invocable_r、invoke_result
result_ofis_invocable<Foo(Args...), R>「で呼び出しFooてArgs...互換性のあるものを取得できますかR」で、R=voidデフォルトはです。invoke_result<Foo, Args...>std::result_of_t<Foo(Args...)>明らかに混乱は少ないですか?for_each_n
reduce
transform_reduce
exclusive_scan
inclusive_scan
transform_exclusive_scan
transform_inclusive_scan
スレッド化の目的で追加され、スレッド化されていない場合でも公開されます
atomic<T>::is_always_lockfree
std::lock、一度に複数のミューテックスをロックしたときに痛みを。stdアルゴリズムの並列バージョン、および関連する機構[func.searchers] そして [alg.search]
std::functionアロケータについてstd::sample、範囲からサンプリング?
try_emplace そして insert_or_assign
スプライシングのためmap<>、unordered_map<>、set<>、およびunordered_set<>
.data()文字列の非定数。
非会員 std::size、std::empty、std::data
std::begin/のendemplace関数のファミリは、作成されたオブジェクトへの参照を返すようになりました。
unique_ptr<T[]>修正およびその他unique_ptr微調整。weak_from_this そして、いくつかはこれから共有するように修正されましたstdデータ型の改善:{} の建設 std::tupleとその他の改善C ++ 17ライブラリはC99ではなくC11に基づいています
将来の標準ライブラリstd[0-9]+用に予約済み
std実装ですでに公開されているユーティリティコードstd::clamp()
std::clamp( a, b, c ) == std::max( b, std::min( a, c ) ) 大体gcd そして lcmstd::uncaught_exceptions
std::as_conststd::bool_constant_vテンプレート変数std::void_t<T>
std::owner_less<void>
std::less<void>ですが、内容に基づいてソートするスマートポインタ用std::chrono 研磨std::conjunction、std::disjunction、std::negation暴露std::not_fn
stdstd::less。<codecvt>memory_order_consumeresult_of、 交換された invoke_resultshared_ptr::unique、あまりスレッドセーフではありませんIsocpp.orgはは、C ++ 14以降の変更の独立したリストがあります。それは部分的に略奪されました。
当然、TSの作業は並行して行われるため、完全に熟していないTSの中には、次の反復を待つ必要があるものもあります。次の反復のターゲットは、以前に計画されたC ++ 20であり、噂が暗示するC ++ 19ではありません。C ++ 1Oは回避されました。
このreddit投稿とこのreddit投稿から取得した最初のリストリンクはグーグル経由または上記のisocpp.orgページから追加されています。
SD-6機能テストリストから略奪された追加のエントリ。
clangの機能リストとライブラリ機能リストは略奪されます。これはC ++ 17ではなくC ++ 1zであるため、信頼性が低いようです。
これらのスライドには、他の場所には欠けている機能がいくつかありました。
「何が削除されたか」は尋ねられませんでしたが、C ++ 17でC ++から削除されたいくつかの((主に?)以前は非推奨)の短いリストを次に示します。
register、将来の使用のために予約されているキーワードbool b; ++b;<functional>もの、random_shufflestd::function言い換えがありました。これらがコードに影響するのか、それとも標準のクリーンアップなのかはわかりません。
P0505R0(constexprクロノ)
P0418R2(アトミック調整)
P0512R0(テンプレート引数の控除の微調整)
P0490R0(構造化バインディングの調整)
P0513R0(に変更std::hash)
P0502R0(並列例外)
P0509R1(例外処理の更新制限)
P0012R1(例外仕様を型システムの一部にする)
P0510R0(バリアントの制限)
P0504R0(オプション/バリアント/任意のタグ)
P0497R0(共有ptr調整)
P0508R0(構造化バインディングノードハンドル)
P0521R0(共有ポインターの使用カウントと固有の変更?)
https://isocpp.org/files/papers/p0636r0.html
memory_order_consume正式に廃止されたようではありません。これは単に注記で推奨されていません。これについて言及するのは理にかなっているかもしれません(たとえば、括弧が付いています)?