c 17 の新機能には次のものが含まれます: 1. 自動式導出のルールの変更; 2. ラムダ式で「*this」をキャプチャできる; 3. ヘッダー ファイルでグローバル変数を直接定義できる新しいインライン変数; 4. 条件式での初期化ステートメントをサポート; 5. 列挙型の直接リスト初期化など。
このチュートリアルの動作環境: Windows 7 システム、C 17 バージョン、Dell G3 コンピューター。
関連する推奨事項: 「C ビデオ チュートリアル 」
C 17 の新機能
1. auto キーワード
c 11 以降、auto キーワードは初期化子を通じて変数の型を推測できます。 C 14 では、auto キーワードの機能がさらに改良され、関数の戻り値の型を return ステートメントを通じて推定できるようになりました。 auto キーワードを使用すると、コーディング効率が向上し、再構成プロセスが簡素化されます。ただし、C 11 での自動導出では、予想とは異なる結果が得られることがよくあります。
c 11 で統合初期化をサポートするために、次に示すように、新しい統合初期化構文が導入されました。
// c++11 auto x3{ 1, 2 }; // std::initializer_list<int> auto x4 = { 3 }; // decltype(x4) is std::initializer_list<int> auto x5{ 3 }; // std::initializer_list<int>
これら 3 つの方法で初期化された変数の場合、最終的な型導出結果は、私たちが考える int ではなく、std::initializer_list になります。これは、変数 auto を宣言する式を {} で囲んだ場合、推定される型が std::initializer_list となるためです。
C 17 では、auto 式導出のルールが変更されました
// c++17 auto x3{ 1, 2 }; // error: not a single element auto x4 = { 3 }; // decltype(x4) is std::initializer_list<int> auto x5{ 3 }; // decltype(x5) is int
比較の結果、auto x5{3} は変数を x5 に直接導出するのに対し、x3{1, 2} は変数を直接導出することがわかりました。このメソッドもコンパイルに失敗します。自動導出のルールがより直感的になりました。
2. ラムダ式
lambda は C 11 でも導入されました。C 11 では、ラムダ式は現在のオブジェクトである this のみをキャプチャできます。唯一の参考。 C 17 では、現在のオブジェクトのコピーである *this をキャプチャできます。現在のオブジェクトのコピーをキャプチャすると、現在のオブジェクトが解放された後、ラムダ式で this 内の変数とメソッドを安全に呼び出すことができます。
3. インライン変数
インライン変数では、変数を複数回定義できます。 C 17 より前では、グローバル変数を定義するときは、常に cpp ファイル内で変数を定義し、その後 extern キーワードを使用して変数が別の場所で定義されていることをコンパイラに伝える必要がありました。インライン変数が表示された後は、再定義エラー メッセージを気にすることなく、ヘッダー ファイル内でグローバル変数を直接定義できます。
4. 条件式で初期化ステートメントがサポートされます
c 17 は、if ステートメントまたは switch ステートメントでの初期化をサポートします。この機能の出現により、コードをより簡潔にすることができます。
// c++17之前 map<int, string> c = {{1,"a"}}; { auto res = c.insert(make_pair(2, "b")); if(!res.second) { cout << "key 1 exist" << endl; } else { cout << "insert success, value:" << res.first->second << endl; } }
上記のコードでは、res は一時変数であり、後続のコードに影響を与えたくないため、中括弧のペアを使用してスコープを制限しています。ただし、c 17 の構文を使用し、if 条件で res を初期化すると、コードはより簡潔に表示されます。
// c++17 map<int, string> c = {{1,"a"}}; if(auto res = c.insert(make_pair(2, "b")); !res.second ) { cout << "key 1 exist" << endl; } else { cout << "insert success, value:" << res.first->second << endl; }
c 17 の標準ライブラリも拡張され、次のデータ型が追加されました。
1. std::variant
std::variant はタイプセーフな共用体であり、共用体の拡張バージョンです。Variant は、次のようなより複雑なデータ型をサポートします。 map 、 string など
2. std::optional
std::optional は可能な値を表します。関数を通じてオブジェクトを作成する場合、通常は関数を使用してエラー コードを返し、パラメータを通じてオブジェクト自体を返します。
std::optional では、
has_value() // 检查对象是否有值 value() // 返回对象的值,值不存在时则抛出 std::bad_optional_access 异常 value_or() // 值存在时返回值,不存在时返回默认值
3. std::any# で作成したインスタンスを返すと、より直感的になります。
##任意の値を保存できるタイプセーフなコンテナー4. std::string_view
string_view c17 でブースト バージョンの string_view を初めて使用しました。ブーストと似ています。 string_view は、元の文字列への読み取り専用の参照として理解できます。 string_view 自体は、元の文字列データを保存するための追加メモリを適用せず、元の文字列のアドレスと長さを保存するだけです。多くの場合、文字列は一時的に処理されるだけであり、元の文字列のコピーは必要ありません。 string_view を使用すると、不必要なメモリ コピーが削減され、プログラムのパフォーマンスが向上します。文字列ポインターを使用する場合と比較して、string_view はより適切なカプセル化を提供します。 string_view には元の文字列の所有権がないため、string_view を使用する場合は元の文字列のライフサイクルに注意する必要があることに注意してください。元の文字列が破棄されると、string_view を呼び出すことができなくなります。その他の機能:
さらに、C 17 ではその他の機能も追加されていますが、この記事では 1 つずつ挙げていません。- ブール式は使用できません。これら 2 つの増分 (減少) 演算子は使用されなくなりました
- #c 17 の例外は、 type システムの一部、
- 列挙型の直接リスト初期化
- 構造化バインディング
- constexpr if 式
- map はマージと抽出をサポートします
プログラミング関連の知識について詳しくは、プログラミング学習をご覧ください。 !
以上がC++17の新機能は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

C#と.NETランタイムは密接に連携して、開発者に効率的で強力なプラットフォームの開発機能に力を与えます。 1)C#は、.NETフレームワークとシームレスに統合するように設計されたタイプセーフおよびオブジェクト指向のプログラミング言語です。 2).NETランタイムは、C#コードの実行を管理し、ガベージコレクション、タイプの安全性、その他のサービスを提供し、効率的でクロスプラットフォームの操作を保証します。

C#.NET開発を開始するには、次のことが必要です。1。C#の基本的な知識と.NETフレームワークのコア概念を理解する。 2。変数、データ型、制御構造、関数、クラスの基本概念をマスターします。 3。LINQや非同期プログラミングなど、C#の高度な機能を学習します。 4.一般的なエラーのためのデバッグテクニックとパフォーマンス最適化方法に精通してください。これらの手順を使用すると、C#.NETの世界に徐々に浸透し、効率的なアプリケーションを書き込むことができます。

C#と.NETの関係は切り離せませんが、同じものではありません。 C#はプログラミング言語であり、.NETは開発プラットフォームです。 C#は、コードの書き込み、.NETの中間言語(IL)にコンパイルされ、.NET Runtime(CLR)によって実行されるために使用されます。

C#.NETは、複数のアプリケーション開発をサポートする強力なツールとライブラリを提供するため、依然として重要です。 1)C#は.NETフレームワークを組み合わせて、開発を効率的かつ便利にします。 2)C#のタイプの安全性とゴミ収集メカニズムは、その利点を高めます。 3).NETは、クロスプラットフォームの実行環境とリッチAPIを提供し、開発の柔軟性を向上させます。

c#.netisversatileforbothwebanddesktopdevelopment.1)forweb、useasp.netfordynamicapplications.2)fordesktop、equindowsorwpfforrichinterfaces.3)usexamarinforcross-platformdeveliment、enabling deshacrosswindows、

C#と.NETは、継続的な更新と最適化を通じて、新しいテクノロジーのニーズに適応します。 1)C#9.0および.NET5は、レコードタイプとパフォーマンスの最適化を導入します。 2).Netcoreは、クラウドネイティブおよびコンテナ化されたサポートを強化します。 3)ASP.Netcoreは、最新のWebテクノロジーと統合されています。 4)ML.NETは、機械学習と人工知能をサポートしています。 5)非同期プログラミングとベストプラクティスはパフォーマンスを改善します。

c#.netissuitableforenterprise-levelApplicationsとsystemduetoitsSystemdutyping、richlibraries、androbustperformance.

.NETでのC#のプログラミングプロセスには、次の手順が含まれます。1)C#コードの作成、2)中間言語(IL)にコンパイルし、3).NETランタイム(CLR)によって実行される。 .NETのC#の利点は、デスクトップアプリケーションからWebサービスまでのさまざまな開発シナリオに適した、最新の構文、強力なタイプシステム、および.NETフレームワークとの緊密な統合です。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、
