Visual Studio 2012 における Visual C++ の新機能
このドキュメントでは Visual Studio 2012 の Visual C++の新機能と強化された機能を紹介します。
Visual Studio 2012の他の追加については、Visual Studio 2012 の新機能を参照してください。
[!メモ]
Windows ストア の apps を作成する開発者のための、統合開発環境の (IDE) の機能については、Visual Studio 2012 を使用して Windows ストア apps を開発します。" "を参照してください。
強化された C++11 標準のサポート
標準テンプレート ライブラリ
新しい STL のヘッダーのサポート: <atomic>、<chrono>、<condition_variable>、<filesystem>、<future>、<mutex>、<ratio>と <thread>。
メモリ リソースの使用率を最適化するため、コンテナーは、より小さい。たとえば、既定の設定での x86 のリリース モードで、std::vector は Visual Studio 2010 の 16 バイトで Visual Studio 2012の 12 バイトに縮小し、std::map は Visual Studio 2010 の 16 バイトで Visual Studio 2012の 8 バイトに縮まりました。
でき、標準 C++11 から要求されないように恐い反復子が実装されています。詳細については、PDF のドキュメントを 恐い反復子の割り当てと初期化参照してください。
他の C++11 強化
**ループの範囲です。**フォーム for (for-range-declaration:expression)の配列、STL コンテナーと Windows ランタイム のコレクションを使用するよりも信頼性の高いループを記述できます。これは、コア言語サポートの一部です。詳細については、「範囲ベースの for ステートメント (C++)」を参照してください。
これで、ステートレスのラムダは空のラムダ introducer [] から始まり、コード ブロックのローカル変数をキャプチャ (暗黙的に C++11 標準に必要な機能する、またはポインターです。詳細については、「C++ でのラムダ式」を参照してください。
**スコープの列挙型のサポート。**C++ enum class 列挙型のキーはなりました。次のコードはこのキーが enum 列挙型の動作と異なる点に示します。
enum class Element { Hydrogen, Helium, Lithium, Beryllium }; void func1(Element e); func1(Hydrogen); // error C2065: 'Hydrogen' : undeclared identifier func1(Element::Helium); // OK
Windows ストア App の開発のサポート
**ネイティブな XAML ベースの UI のモデル。**Windows ストア の apps では、新しいネイティブな XAML ベースの UI のモデルを使用できます。詳細については、チュートリアル: C++ を使用して Windows の最初ストア アプリケーションを作成します。" "を参照してください。
**Visual C++ コンポーネントの拡張子。**これらの拡張機能は Windows ストア の apps の必要な部分である Windows ランタイム のオブジェクトの使用量を簡略化します。詳細については、" "を参照 C++ を使用して Windows ストア apps のロードマップ してください Visual C++ の言語リファレンス (C++/CX)
**DirectX ゲーム。**Windows ストア の apps に DirectX の新しいサポートを使用して、魅力的なゲームを作成できます。詳細については、DirectX を使用して、最初の Windows ストアのゲームを作成します。C++ の開発に大理石の中身、Windows ストアと DirectX ゲーム" "を参照してください。
XAML および DirectX の両方を利用する**XAML/DirectX の相互運用。**Windows ストア の apps は効率よく相互運用されます。
**Windows ランタイム 構成の方法で開発できます。**構成の DLL の開発は Windows ランタイム の環境を拡張できるようにします。詳細については、C++ を使用して Windows ストア apps のロードマップC++ Windows のランタイム コンポーネントの作成" "を参照してください。
Visual C++ のコンパイラとリンカー
**自動vectorizer。**コンパイラは、コードのループを、できる限り出力すべての最新のプロセッサにある命令とベクター レジスタを使用する方法を解析します。これはループをすばやく移動します。(プロセッサの命令は SIMD 拡張機能をストリーム転送するの SSE として知られています)。自動的に適用されるため、この最適化を有効または要求する必要はありません。
**自動parallelizer。**コンパイラは、コードのループを分析し、複数のコアまたはプロセッサに計算を広げる命令を生成できます。これはループをすばやく移動できます。既定で有効にする必要があるため、この最適化処理を要求する必要があります。多くの場合、これは、並列化するループの直前のコードに #pragma loop(hint_parallel(N)) を含めることができます。
計算に複数のコア間で反映され、ベクターが登録する各コアの使用のコードとして自動 vectorizer と自動 parallelizer が連携できます。詳細については、「自動並列のエラーおよび警告」を参照してください。
Visual Studio 2012 更新プログラム 1で新しい
には、C++ コードをビルドするときに Windows XP を対象とします。
Windows XP と Windows Server 2003 を対象とするために Visual C++ コンパイラおよびライブラリを使用できます。詳細については、「Windows XP 用 C++ 11 プログラムの構成」を参照してください。
並列プログラミングのサポート
C++ で加速された大きい並列 (AMP)
C++ AMP は、通常、個々のグラフィックス カード、GPU あるデータ並列ハードウェアを使用して、C++ コードの実行を高速化します。C++ AMP のプログラミング モデルは、多次元配列のインデックス付け、メモリのコピー、タイル、数学関数のライブラリが含まれています。C++ AMP の言語拡張機能、およびコンパイラの制限では、データがへの移動および CPU から GPU 方法を制御できます。詳細については、「C++ AMP (C++ Accelerated Massive Parallelism)」を参照してください。
C++ では、デバッグとプロファイリング大きい並列 (AMP) を加速しました
**デバッグ。**GPU を対象にするには、C++ AMP を使用する apps のデバッグ機能は他の C++ apps のデバッグのようになります。これにより、上記された新しい並列デバッグの追加があります。「GPU コードのデバッグ」を参照してください。
**プロファイリングを停止する。**そこで、C++、およびそのほかの AMP Direct3D ベースのプログラミング モデルに基づく GPU のアクティビティのサポートのプロファイリングを行っています。「GPU アクティビティ グラフ」を参照してください。
一般の並列プログラミングの強化
マルチコア、多くのコア アーキテクチャに実行されてハードウェアが開発者は一つのコアに常にインクリメントするクロック速度には使用できません。同時実行ランタイム での並列プログラミングのサポートは、の新しいアーキテクチャを利用することが可能になります。
Visual Studio 2010では、同時実行を利用するために、[Parallel Patterns Library] のような強力な C++ の並列化のライブラリは、機能とともに高度なデータ フローおよびパイプラインの表現で、導入されました。Visual Studio 2012では、開発者が最も必要な並列パターンによりパフォーマンス、より多くのコントロールおよび豊富なサポートを提供するために、これらのライブラリは伸びました。これで、指定の幅は次のとおりです。:
asynchrony コンティニュをサポートする豊富なタスク ベースのプログラミング モデル。詳細については、「タスクの並列化 (同時実行ランタイム)」を参照してください。
並列アルゴリズム、fork-join コンストラクトの並列化 (parallel_for、parallel_for、parallel_for_each、parallel_sort、parallel_reduce、関係の parallel_transform) をサポートする。
同時実行セーフなコンテナー、priority_queue、queue、vectorと mapなどの std のデータ構造のスレッド セーフなバージョンを提供する。
同時実行単位に自然に分解するデータ フローのパイプラインを表現するために使用できる 非同期エージェント ライブラリ)。
このパターンの滑らかなコンポジションを容易にするカスタマイズできるスケジューラとリソース マネージャー リスト。「タスク スケジューラ (同時実行ランタイム)」を参照してください。
一般的な並列デバッグの強化
[並列タスク] のウィンドウと [並列スタック] のペインだけでなく、Visual Studio 2012 は、すべてのスレッドやプロセス間で式の値を確認したり、結果の並べ替えとフィルター処理を実行するように [並列ウォッチ] の新しいウィンドウが。ウィンドウの拡張に独自のビジュアライザーを使用するすべてのツール ウィンドウ間で新しいマルチプロセスのサポートを利用できます。詳細については、「方法: 並列ウォッチ ウィンドウを使用する」を参照してください。
IDE
C++ で作成する場合は、Visual Studio IDE のツールにより、生産性であるのに役立つ重要な改善があります。IDE の機能強化に関する詳細については、Visual Studio 2012 製品の主な強化点を参照してください。
**Visual Studio テンプレートのサポート。**これで、C++ プロジェクトおよび項目テンプレートを作成するには、Visual Studio テンプレートの方法を使用できます。
**非同期ソリューションの読み込み。**これで、プロジェクトを最初のため、がより高速に動作することを開始できるソリューションの読み込み asynchronously-the の主要な部分です。
**リモート デバッグの自動配置。**Visual C++ のリモート デバッグのファイルの配置が簡単です。プロジェクトのコンテキスト メニューの配置のオプションは、リモート コンピューターに自動的にデバッグ構成のプロパティで指定されたファイルをコピーします。ファイルのコピーを手動でリモート コンピューターに不要です。詳細については、「ローカルでビルドされたプロジェクトのリモート デバッグ」を参照してください。
**C++/CLI IntelliSense。**C++/CLI に、IntelliSense を完全にサポートされています。クイック ヒント、パラメーター ヘルプ、メンバーの一覧と自動終了などの IntelliSense 機能は C++/CLI で動作します。また、このドキュメントに記載されている他の IntelliSense と IDE の拡張機能も C++/CLI で機能します。
**IntelliSense の豊富なツールヒント。**C++ の IntelliSense クイック ツールヒントは、豊富な XML ドキュメント コメントのスタイル情報を示します。ライブラリの例は、から API を使用して、XML ドキュメントを持つこと AMP C++ では、IntelliSense のヒントを示します申告以上の情報をコメント アウトします。また、コード内に XML ドキュメント コメントがある場合、IntelliSense のヒントは豊富な情報を示します。
**C++ コード コンストラクター。**スケルトン コードは、スイッチで使用できる場合、ループとメンバーの一覧]ボックスの一覧で、他の基本コード コンストラクターのほか、です。と、コードに挿入し、必要なロジックを表示するようにリストからコードを選択します。また、エディターの使用のための独自のカスタム コードを作成できます。詳細については、「コード スニペット」を参照してください。
メンバーの一覧機能拡張。メンバーの一覧]ボックスの一覧に、コードをコード エディターに入力すると自動的に表示されます。結果は入力すると、関連するメンバーのみを表示するように、フィルター処理します。フィルターの種類 [テキスト エディター]、[C/C++]、[詳細] の下の [オプション] のダイアログ ボックスのメンバーによって使用されるロジックをフィルター処理を制御できます。詳細については、「IntelliSense の使用方法」を参照してください。
意味色付け型は、列挙型、マクロ、およびそのほかの C++ のトークンに、色づけが既定で含まれます。詳細については、「コード エディターとテキスト エディターでのコードの作成」を参照してください。
参照の強調表示されます。シンボルを選択して、現在のファイルのシンボルのすべてのインスタンスを強調表示します。参照の強調表示の間で実行するには Ctrl+Shift+Up の矢印または Ctrl+Shift+Down の矢印を押します。[テキスト エディター] の下に、[詳細][オプション] のダイアログ ボックスでこの機能を [C/C++]、回転できます。
アプリケーションのライフサイクルの管理ツール
スタティック コード分析
C++ のスタティック分析エラーは、豊富なコンテキスト情報、さらに分析規則とは、分析結果を提供するために更新されました。[コード分析] の新しいウィンドウで、キーワード、プロジェクト、重大度でメッセージをフィルター処理できます。ウィンドウのメッセージを選択すると、メッセージがトリガーされたコードの行がコード エディターで強調表示されます。特定の C++ の警告では、警告メッセージがにルーティング実行パスことを示すソース行を示します; 特定のパスが強調表示されていることを決定して取得と理由。
コード分析は Visual Studio 2012のほとんどのエディションに含まれます。Professional では、Premium、Ultimate Edition は、すべての規則が含まれます。Windows 8、Windows Phone の Express Edition では、最も重要な警告が含まれます。コード分析は、Web の Express Edition に含まれません。
他のあるコード分析の強化:を次に示します。
新しい同時実行の警告は、C/C++ プログラムで正しいロックの作業分野を使用していることを確認して同時実行のバグを回避できます。アナライザーには、競合状態、ロックを逆順、コントラクト違反は、対応していない同期操作ロックする呼び出し元/呼び出し先、および他の同時実行のバグを検出します。
規則セットを使用してコード分析の実行に適用する規則を説明します C++ を指定できます。
[コード分析] のウィンドウで、ソース・コードに選択した警告を抑制するプラグマを挿入できます。
関数がパラメーターを使用する方法を示すために Microsoft ソース・コードのコメント言語 (SAL)、それらについてすると、いつ完了するかという保証できます。前提条件の新しいバージョンを使用してスタティック コード分析の正確性と完全性が向上します。
64bit C++ プロジェクトのサポート。
コードの品質を向上する方法の詳細については、コード分析ツールを使用したアプリケーション品質の分析を参照してください。
更新された単体テスト フレームワーク
C++ 単体テストの作成に Visual Studio で新しい C++ 単体テスト フレームワークを使用します。[新しいプロジェクト] のダイアログ ボックスの [Visual C++] のカテゴリに [C++ Unit Test Project] テンプレートを指定することにより、既存の C++ ソリューションに新しい単体テスト プロジェクトを追加します。ファイル Unittest1.cpp の TEST_METHOD の生成されたスタブ コードの単体テストの記述を開始します。テスト コードを記述するときに、ソリューションをビルドします。次に、テストを実行する場合に [単体テスト エクスプローラー] のウィンドウを [ビュー]、[その他のウィンドウ]、追加するテスト ケースのショートカット メニューの [単体テスト エクスプローラー] の、オプションで開き、[選択されたテストを実行] を選択します。テストの実行が完了すると、同じウィンドウのテスト結果および追加のスタック トレース情報を表示できます。「単体テストを使用したコードの検証」および「Windows ストア アプリでの単体テストの作成と実行」を参照してください。
アーキテクチャの依存関係グラフ
コードをより的確に把握するには、binary の依存関係グラフ、クラス、名前空間を生成できます。ソリューションにファイルが含まれます。次に、メニュー バーで、依存関係グラフを生成するには [アーキテクチャ]、[依存関係グラフの生成] と [ソリューション] または [インクルード ファイルの場合] を選択します。グラフの生成が完了すると、各ノードの展開によってこれを使用してノード間を移動して依存関係を理解したり、ノードのショートカット メニューの [コンテンツの表示] を選択して、ソース・コードを参照します。依存関係グラフを生成するには *.cpp のソース・コード ファイルのショートカット メニューのファイルが含まれる場合は、*.h のヘッダー ファイルは、[インクルード ファイルのグラフを生成] を選択します。「依存関係グラフでのコード依存関係の視覚化」を参照してください。
アーキテクチャ エクスプローラー
アーキテクチャ エクスプローラーを使用して、の C++ ソリューション、プロジェクト、またはファイル アセットを確認できます。メニュー バーで、[アーキテクチャ]、[ウィンドウ]、[アーキテクチャ エクスプローラー] を選択します。次に、記録対象のノード、たとえば、[クラス ビュー] を選択できます。この場合、ツール ウィンドウの右側は、名前空間の一覧とともに配置されます。名前空間を選択すると、新しい列がこの名前空間のクラス、構造体、列挙型の一覧を示します。これらのアセットを探索し続けることも、異なるクエリを開始したことを、左端の列に戻ります。「アーキテクチャ エクスプローラーを使用したコードの検索」を参照してください。
コード カバレッジ
コード カバレッジは実行時に動的に binary をインストルメント化するために更新されました。これは、構成のオーバーヘッドを下げ、より優れたパフォーマンスを実現します。また、C++ アプリケーションの単体テストからコード カバレッジ データを収集できます。作成する方法の詳細については、単体テストの実行は、このドキュメントの単体テスト フレームワークのセクションを参照してください。C++ 単体テストを作成した場合、ソリューションのテストを検出するために [単体テスト エクスプローラー] を使用できます。単体テストを実行し、コード カバレッジ データを収集 [単体テスト エクスプローラー] では、[コード カバレッジの分析] を選択します。選択します [テスト]、[ウィンドウ]、[コード カバレッジの結果] をメニュー バー ペインの [コード カバレッジの結果] のコード カバレッジ結果を確認できます。「コード カバレッジを使用した、テストされるプロジェクトのコード割合の確認」を参照してください。