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
とauto
const 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"sv
char_traits
std::byte
彼らがかむことができるよりも多くオフ。
std::invoke
std::apply
std::make_from_tuple
、std::apply
オブジェクト構築に適用
is_invocable
、is_invocable_r
、invoke_result
result_of
is_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
/のend
emplace
関数のファミリは、作成されたオブジェクトへの参照を返すようになりました。
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
そして lcm
std::uncaught_exceptions
std::as_const
std::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
std
std::less
。<codecvt>
memory_order_consume
result_of
、 交換された invoke_result
shared_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_shuffle
std::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
正式に廃止されたようではありません。これは単に注記で推奨されていません。これについて言及するのは理にかなっているかもしれません(たとえば、括弧が付いています)?