C++ 17は機能が完成したため、大幅な変更はありません。 C++ 17に向けて何百もの提案が出されました。
C++ 17でC++に追加された機能はどれですか。
「C++ 1z」をサポートするC++コンパイラを使用する場合、コンパイラがC++ 17にアップデートされたときに利用できる機能はどれですか。
[*this]{ std::cout << could << " be " << useful << '\n'; }
属性の名前空間を繰り返す必要がないようにするには、 属性内のusing
name__ を使用します。
コンパイラは 非標準の属性を認識できないため無視する必要があります になりました。
文字列を含まない単純な static_assert(expression);
throw()
)以外のthrow
NAME_ 、およびthrow()
はnoexcept(true)
です。
std::tie
とauto
name__const auto [it, inserted] = map.insert( {"foo", bar} );
map::insert
が返すit
name__から推測された型で、変数inserted
name__およびpair
name__を作成します。std::array
sおよび比較的フラットな構造体で動作しますif (init; condition)
およびswitch (init; condition)
if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
if(decl)
をdecl
name__が賢明に変換可能ではない場合に拡張します。(いくつかの)式に対する評価の固定順序 _ _いくつかの 修正
.then
を作ります。順方向進行保証(FPG)(また、 並列アルゴリズム用のFPG )
u8'U', u8'T', u8'F', u8'8'
文字リテラル(文字列は既に存在します)
継承されたコンストラクタ いくつかのコーナーケースを修正しました(振る舞いの変更の例については P0136R0 をご覧ください)
std::string
string const&
を取りません。また、bajillionの構文解析を速くすることができます。"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
name__をArgs...
で呼び出してR
name__と互換性のあるものを取得することができます"です。ここでR=void
はデフォルトです。invoke_result<Foo, Args...>
はstd::result_of_t<Foo(Args...)>
ですが、どうやら混乱が少ないようですか?[class.directory_iterator]
と [class.recursive_directory_iterator]
fstream
name__sは、const path::value_type*
文字列と共に、path
name__sと共に開くことができます。
for_each_n
reduce
name__
transform_reduce
exclusive_scan
inclusive_scan
transform_exclusive_scan
transform_inclusive_scan
スレッド化の目的で追加され、スレッド化していなくても公開される
atomic<T>
::is_always_lockfree
std::lock
の手間を省きます。std
name__アルゴリズムの並列バージョン、および関連機構[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
name__のようにemplace
name__ファミリーの関数 作成されたオブジェクトへの参照を返すようになりました 。
unique_ptr<T[]>
の修正 およびその他の unique_ptr
調整。weak_from_this
とこれから共有するように修正されたものstd
name__データ型の改善点:{}
のstd::Tuple
作成およびその他の改良C++ 17ライブラリは C99ではなくC11 に基づいています
将来の標準ライブラリ 用に予約されたstd[0-9]+
std
name__実装にすでに公開されているユーティリティコードstd::clamp()
std::clamp( a, b, c ) == std::max( b, std::min( a, c ) )
大体gcd
NAME__およびlcm
NAME_std::uncaught_exceptions
std::as_const
std::bool_constant
_v
テンプレート変数std::void_t<T>
std::owner_less<void>
std::less<void>
と似ていますが、内容に基づいてソートするスマートポインタ用です。std::chrono
polishstd::conjunction
、std::disjunction
、std::negation
公開std::not_fn
std
name__内での例外を除く規則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投稿 から取得しました。リンクはgoogling経由で、または上記のisocpp.orgページから追加されました。
SD-6 feature-testリストから追加のエントリが追加されました。
その次に clangの機能リスト と ライブラリ機能リスト があります。 C++ 17ではなく、C++ 1zなので、これは信頼できるものではないようです。
これらのスライド には他の場所で欠けているいくつかの機能がありました。
「削除されたもの」は尋ねられませんでしたが、C++ 17でC++から削除された(ほとんどが以前は推奨されていなかった)いくつかのことを簡単に説明します。
register
NAME_ 、将来の使用のために予約されているキーワードbool b; ++b;
<functional>
のもの、random_shuffle
std::function
内のアロケータ言い換えがありました。これらがコードに何らかの影響を与えるのか、それとも単に標準のクリーンアップなのか、私にはわかりません。
P0505R0 (constexpr chrono)
P0418R2 (アトミック微調整)
P0512R0 (テンプレート引数の控除の調整)
P0490R0 (構造化バインディングの調整)
P0513R0 (std::hash
への変更)
P0502R0 (並列例外)
P0509R1 (例外処理の制限事項の更新)
P0012R1 (例外指定を型システムの一部にする)
P0510R0 (亜種の制限)
P0504R0 (オプション/バリアント/任意のタグ)
P0497R0 (共有ptrの調整)
P0508R0 (構造化バインディングノードハンドル)
P0521R0 (共有ポインタはカウントと一意の変更を使用しますか?)
https://isocpp.org/files/papers/p0636r0.html