C++ へようこそ (Modern C++)
C++ は世界で最も広く使用されているプログラミング言語の 1 つです。効率的に C++ プログラムは、すばやく効率的です。言語は、デバイス ドライバー、埋め込みプログラム、Windows のクライアントに、高性能指数的なソフトウェアに、今度 apps と人目の広範囲なゲームの作成に apps それを使用できるため、他の言語よりも柔軟性があります。20 年以上これらの間などのような問題を解決するために、C++ が使用されていました。またはがあります。何がわからない C++ プログラマが増加する値が昨日の流行旧式の C のプログラミング スタイルの上に着るに最新 C++ を折ったためです。
C++ の元の要件の 1 つが、C 言語の下位互換性いません。それ以来次に、C++ クラスは、元の C++ 言語仕様で複数のイテレーション C により、多数の後続の拡張機能配置しました。このため、継承、プロパティは、C++ 向けのマルチパラダイム プログラミング言語と呼ばれます。C++ では、未加工のポインター、配列、null で終わる文字列、カスタム データ構造などの機能を含む、手順 C のスタイルをプログラミングするほどパフォーマンスを有効にする可能性があること、またはバグと複雑さを作成できます。C のプログラミング スタイルがこのようなリスク化されるため、C++ の検出の目標の 1 つが記述しやすくプログラムのタイプ セーフを行うことで、拡張、および管理します。事前に、C++ では、オブジェクト指向プログラミングなどのプログラミング パラダイムを追加しました。長年にわたり、機能はデータ構造やアルゴリズムの高いテストされた標準ライブラリとともに、言語に追加されました。最新 C++ のスタイルにされるのは、これらの追加です。
C++ では、現在強調しています:
ヒープの静的またはグローバル スコープではなくスタック ベースの範囲。
明示的な型名の代わりに、自動型の推定。
ポインターではなく生のスマート ポインター。
char[] の生の配列の代わりにstd::string と std::wstring の型 (<string>を参照)。
標準テンプレート ライブラリ (STL) のコンテナーは、未加工の配列またはカスタムのコンテナーの代わりに vector、listと map が選択されます。<vector>、<list>、および <map> を参照してください。
手動でコード化されたもので はなく、[STL algorithms]。
例外は、エラー条件を処理する報告します。
他のスレッド間通信機構ではなく、STL std::atomic<> を使用してロック制御不要のスレッド間通信 (<atomic>を参照)。
個別に実装される小さい関数の代わりにインライン ラムダ関数。
フォーム for (for-range-declaration:expression)の配列、STL コンテナーと Windows ランタイム のコレクションを使用するよりも信頼性の高いループを記述ループの範囲です。これは、コア言語サポートの一部です。詳細については、「範囲ベースの for ステートメント (C++)」を参照してください。
C++ 言語自体も配置しました。次のコード スニペットを比較します。この 1 つが事項が C++ にあるどのように使用するかを示します:
// circle and shape are user-defined types
circle* p = new circle( 42 );
vector<shape*> v = load_shapes();
for( vector<circle*>::iterator i = v.begin(); i != v.end(); ++i ) {
if( *i && **i == *p )
cout << **i << “ is a match\n”;
}
for( vector<circle*>::iterator i = v.begin();
i != v.end(); ++i ) {
delete *i; // not exception safe
}
delete p;
ここで同じ操作が最新 C++ でどのように実現することです:
#include <memory>
#include <vector>
// ...
// circle and shape are user-defined types
auto p = make_shared<circle>( 42 );
vector<shared_ptr<shape>> v = load_shapes();
for_each( begin(v), end(v), [&]( const shared_ptr<shape>& s ) {
if( s && *s == *p )
cout << *s << " is a match\n";
} );
最新 C++ では、スマート ポインターを使用できるため、新しい/削除または明示的な例外処理を使用する必要はありません。auto のの型推論と ラムダ関数を使用すると、コードをすばやく記述してそれを厳しくシャットダウンし、より的確に把握する。と for_each を使用する方が簡単な少ない for のループ、予期しないエラーにあまり傾向を持つです。最小限のコード行とともに、アプリケーションの記述に定型を使用できます。その例外セーフに、メモリ安全なコードを実行することができます。割り当てと解放またはエラー コードが処理するありません。
最新 C++ では、2 種類のポリモーフィズムが組み込まれています: 継承、テンプレート、および仮想化によって実行時によって、コンパイル時。優れた効果に 2 種類のポリモーフィズムを混在させることができます。STL のテンプレート shared_ptr は、外見上簡単な型の削除を実行するために内部仮想メソッドを使用します。ただし、テンプレートが最適の場合はポリモーフィズムの仮想化を過度に使用しないでください。テンプレートは非常に強力です。
他の言語から C++ に来たら、C++ クラスで既定では、値型であることが特に型の大部分が参照型である非常に数によっては値型であるマネージ言語から、わかれば。ただし、参照型としてサポートするオブジェクト指向プログラミング ポリモーフィックな動作を有効にするように指定できます。有効な観点: 値型はメモリに関する詳細であり、レイアウト コントロール、参照型はポリモーフィズムをサポートする基本クラスと仮想関数についての詳細があります。既定では、値型には、コピー コンストラクターまたはコピー代入演算子がある copyable 実行できます。参照型を指定し、クラスの非 copyable 無効にコピー コンストラクターとコピーの割り当てを、演算子、ポリモーフィズムをサポートする仮想デストラクターを使用する場合は。値型は、別に変更できる 2 種類の値を与える内容についてコピーするときに、あります。ただし、参照型オブジェクトは挙げて説明しますが、ポリモーフィックな型であるため、このような理由では ID または事項について説明します。
C++ では、単に再度絵であるためルネサンスが発生しています。パワー、パフォーマンスが優先されると、プログラマが重要な制限事項がありますが、場合、Java などの言語と、C をお勧めします。ハードウェアが制限されているデバイスの高いパフォーマンスと利便性のために、特に、何も最新 C++ を打ちません。
だけでなく、言語は、最新の開発ツール、すぎるです。Visual Studio には、開発サイクルのすべての部分を、信頼性が高く、および有効にします。には、IntelliSense などのアプリケーション ライフサイクル管理ツール (ALM)、IDE の強化、XAML のようなツールに適した方法、およびビルド、デバッグ、および他のツールが含まれています。
ドキュメントのこの部分の文書は、最も重要な機能に、高度なガイドラインと、ベスト プラクティスと最新の C++ プログラムを作成する方法を示します。