ホームページ >バックエンド開発 >C++ >C 17 で導入された主要な言語機能、ライブラリの追加、非推奨の要素は何ですか?

C 17 で導入された主要な言語機能、ライブラリの追加、非推奨の要素は何ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-08 11:10:19496ブラウズ

What are the key language features, library additions, and deprecated elements introduced in C  17?

C 17 の機能

C 17 では、言語に豊富な新機能が導入され、機能が大幅に拡張され、使いやすさが向上しています。これらの追加には、テンプレートの改善やラムダの機能強化から、ライブラリの追加や非推奨の要素に至るまで、言語のさまざまな側面が含まれます。

言語機能

テンプレートと汎用コード:

  • クラスのテンプレート引数の推定テンプレート: コンストラクターは、関数と同様にテンプレート引数を推定できるようになりました。
  • テンプレート引数: 非型テンプレート引数の型の値を表します。
  • 非型テンプレート引数の改訂: 非型テンプレートに対していくつかの修正と改訂が行われました。 argument.

Lambda:

  • Constexpr Lambdas: Lambda は、特定の要件を満たす場合、明示的に constexpr としてマークできるようになりました。 .
  • これをキャプチャしますLambdas: Lambdas は this ポインタをキャプチャできるようになり、メンバー変数とメソッドにアクセスできるようになります。

属性:

  • 新しい属性: [[fallthrough]] などの属性[[nodiscard]] および [[maybe_unused]] は、コードの明確さと読みやすさを向上させるために導入されました。
  • 名前空間と列挙子の属性: を使用して、名前空間と列挙子に属性を適用できるようになりました。 [[attributes]].

構文のクリーンアップ:

  • インライン変数: 変数をインラインで宣言できるようになりました。コンパイラがインライン化する
  • 簡略化された名前空間宣言: 簡潔な名前空間宣言のために、名前空間 A::B 構文が導入されました。
  • 簡略化された static_assert: static_assert ステートメント文字列なしで使用できるようになりましたargument.

クリーンなマルチリターンとフロー制御:

  • 構造化バインディング: 構造化バインディングにより、より便利なアンパックが可能になります。タプルとその他のデータ構造宣言。
  • 初期化を伴う条件文: if (init;
  • 範囲ベースの For ループの一般化: 範囲ベースの for ループは、以下とは異なるセンチネル (終了反復子) をサポートするようになりました。開始反復子。
  • if constexpr: if constexpr が条件付きを許可するコンパイル時定数に基づくコンパイル。

その他:

  • 16 進浮動小数点リテラル: 浮動小数点リテラルを 16 進形式で表現できるようになりました。
  • オーバーアライメントされたデータの動的メモリ割り当て:オーバーアライメントされたメモリの動的メモリ割り当てのサポートが改善されました。 data.
  • 保証されたコピー省略: コピー省略が保証されなかった特定のシナリオに明示的な保証が追加されました。
  • 改善された評価順序:特定の式の評価順序ルールが、より明確になるように修正されました。

ライブラリの追加

データ型:

  • std::variant: 多態性複数の選択肢のうちの 1 つの値を保持できる型type.
  • std::optional: 値が含まれる場合と含まれない場合があるオプションの値を表します。
  • std::any: A任意の値を保持できる型消去されたコンテナーtype.
  • std::string_view: const char* に似た文字シーケンスへの参照。
  • std::byte: A生を表すタイプbytes.

Utilities:

  • std::invoke: 指定された引数で呼び出し可能オブジェクトを呼び出し、さまざまなタイプのcallables.
  • std::apply: タプルを解凍し、その要素を引数として callable.
  • std::invoke_result および関連概念: 指定された呼び出し可能オブジェクトを呼び出した場合の有効性と結果を決定するための概念と型引数。

ファイル システム ライブラリ (TS v1):

  • ファイル システム、ディレクトリ、ファイルを操作するためのクラスと関数。

新規アルゴリズム:

  • for_each_n
  • reduce
  • transform_reduce
  • exclusive_scan
  • inclusive_scan
  • transform_exclusive_scan
  • transform_inclusive_scan

スレッド:

  • std::shared_mutex:複数の読み取りを許可しますが、書き込みは 1 つだけ許可する共有ミューテックス。
  • atomic::is_always_lockfree: すべての場合においてアトミック タイプがロックフリーかどうかを示します。
  • scoped_lock:: 複数をロックします

(部分的) ライブラリの基礎 ライブラリ (TS v1):

  • 検索の実行と操作のための機能多態性のallocators.

コンテナの改善:

  • try_emplace および insert_or_assign: 特定のシナリオを処理するためのコンテナ挿入メソッドが改善されました。
  • のスプライシングコンテナ: コンテナ間でノードを効率的に移動します。

スマート ポインターの変更:

  • std::unique_ptr およびその他のスマートな機能の修正と調整ポインタ。

追加の改善点:

  • 簡単にコピー可能 std::reference_wrapper: 特定の場合のパフォーマンスが向上します。
  • 更新された C11 ライブラリ: C 17 標準ライブラリは C11 に基づいています、現代のものとの互換性を提供します
  • 非推奨の要素: C 標準の以前のバージョンのさまざまな要素が非推奨になりました。

C 1z の機能 (C 17 で予定)* *

C 1z ワーキングドラフトのどの機能が C 17 で利用可能になるかを決定するためコンパイラについては、個々のコンパイラのドキュメントとリリース ノートを参照することをお勧めします。 C 1z のすべての機能が必ずしもすべての C 17 コンパイラに実装されるわけではありません。

この概要ではすべての変更点や機能が言及されているわけではないことに注意してください。包括的なリストについては、C 17 標準文書またはその他の信頼できる情報源を参照してください。

以上がC 17 で導入された主要な言語機能、ライブラリの追加、非推奨の要素は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。