Visual C++ 2010 の新機能

このドキュメントでは、Visual Studio 2010 に導入された、Visual C++ の新機能および強化された機能を紹介します。

Visual C++ のコンパイラとリンカー

auto キーワード

auto キーワードには、新しい用途が追加されています。 auto キーワードの既定の意味を使用して、変数の宣言の中の初期化子式から推測される型の変数を宣言できます。 /Zc:auto コンパイラ オプションは、auto キーワードの新しい意味または以前の意味を呼び出します。

decltype 型指定子

decltype 型指定子は、指定された式の型を返します。 decltype 型指定子を auto キーワードと組み合わせて使用し、複雑な型またはそのコンパイラのみで認識される型を宣言できます。 たとえば、この組み合わせは、テンプレートの引数の型に応じた戻り値の型を持つテンプレート関数を宣言するために使用します。 または、別の関数を呼び出し、呼び出した関数の戻り値の型を返すテンプレート関数を宣言できます。

ラムダ式

ラムダ関数には、関数本体があるだけで名前がありません。 ラムダ関数は、関数ポインターと関数オブジェクトの最良の特性を結び付けます。

ラムダ関数は、それ自体を関数オブジェクトの代わりにテンプレート関数のパラメーターとして使用するか、または型がラムダの変数を宣言するために auto キーワードと一緒に使用します。

rvalue 参照

rvalue 参照宣言子 (&&) では、rvalue への参照を宣言します。 rvalue 参照を使用すると、移動セマンティクスおよび完全転送を使用して、より効率的なコンストラクター、関数、およびテンプレートを記述できます。

static_assert 宣言

static_assert 宣言では、実行時にテストするその他のアサーションのしくみと異なり、コンパイル時にソフトウェアのアサーションをテストできます。 アサーションが失敗した場合は、コンパイルはエラーになり、指定されたエラー メッセージが発行されます。

nullptr キーワードおよび __nullptr キーワード

Visual C++ コンパイラでは、nullptr キーワードをネイティブ コードまたはマネージ コードと共に使用できます。 nullptr キーワードは、オブジェクト ハンドル、内部ポインター、またはネイティブ ポインター型がオブジェクトを指さないことを示します。 コンパイラは、nullptr を、/clr コンパイラ オプションを使用する場合はマネージ コードとして、/clr オプションを使用しない場合はネイティブ コードとして解釈します。

Microsoft 仕様の __nullptr キーワードは nullptr と同じ意味を持ちますが、ネイティブ コードに対してのみ適用されます。 ネイティブ C/C++ コードを /clr コンパイラ オプションを使用してコンパイルする場合、コンパイラでは、nullptr キーワードがネイティブかマネージかを判断できません。 コンパイラに意図を明確に伝えるため、マネージ コードの場合は nullptr キーワードを使用して指定し、ネイティブ コードの場合は __nullptr キーワードを使用して指定します。

/Zc:trigraphs コンパイラ オプション

既定では、トライグラフのサポートは無効になります。 トライグラフのサポートを有効にするには、/Zc:trigraphs コンパイラ オプションを使用します。

トライグラフは、2 つの連続する疑問符 (??) と、その後に続く一意の 3 番目の文字で構成されます。 コンパイラは、トライグラフを対応する区切り文字に置き換えます。 たとえば、コンパイラは ??= というトライグラフを # 文字 (シャープ記号) で置き換えます。 トライグラフは、C ソース ファイルで、特定の区切り文字を含まない文字セットを使用する場合に使われます。

新しいガイド付き最適化のプロファイル オプション

PogoSafeMode はガイド付き最適化のプロファイルの新しいオプションであり、アプリケーションを最適化する際に、セーフ モードと高速モードのどちらにするかを指定できます。 セーフ モードはスレッド セーフですが、高速モードより低速になります。 高速モードが既定の動作です。

新しい共通言語ランタイム (CLR) オプション /clr:nostdlib

/clr (共通言語ランタイムのコンパイル) 用に新しいオプションが追加されました。 同じライブラリの異なるバージョンが含まれている場合は、コンパイル エラーが発生します。 新しいオプションでは、指定したバージョンをプログラムで使用できるように、既定の CLR ライブラリを除外できます。

新しいプラグマ ディレクティブ detect_mistmatch

プラグマ ディレクティブ detect_mismatch により、同じ名前の他のタグと比較されるタグをファイルに配置できます。 同じ名前の複数の値がある場合、リンカーはエラーを生成します。

XOP 組み込み、FMA4 組み込み、および LWP 組み込み

Visual Studio 2010 SP1 用に追加された XOP 組み込みVisual Studio 2010 SP1 用に追加された FMA4 組み込み、および Visual Studio 2010 SP1 用に追加された LWP 組み込み プロセッサ技術をサポートするために、新しい組み込み関数が追加されました。 __cpuid, __cpuidex を使用すると、特定のコンピューターにどのコプロセッサ技術がサポートされるかを確認できます。

Visual C++ プロジェクトおよびビルド システム

MSBuild

Visual C++ ソリューションおよびプロジェクトは、VCBuild.exe に代わる MSBuild.exe を使用してビルドするようになりました。 MSBuild は、柔軟で拡張性のある XML ベースのビルド ツールであり、他の Visual Studio 言語やプロジェクトの種類でも使用されます。 この変更により、Visual C++ プロジェクト ファイルは XML ファイル形式になり、ファイル名拡張子は .vcxproj になります。 以前のバージョンの Visual Studio で作成された Visual C++ プロジェクト ファイルは、新しいファイル形式に自動的に変換されます。 詳細については、「MSBuild (Visual C++)」を参照してください。

VC++ ディレクトリ

VC++ ディレクトリ設定は、2 つの場所にあります。 VC++ ディレクトリのプロジェクトごとの値を設定するには、プロジェクトのプロパティ ページを使用します。 VC++ ディレクトリの、グローバルな構成ごとの値を設定するには、プロパティ マネージャーおよびプロパティ シートを使用します。

プロジェクト間の依存関係

以前のリリースでは、定義されたプロジェクト間の依存関係はソリューション ファイルに格納されていました。 これらのソリューションが新しいプロジェクト ファイル形式に変換されると、依存関係は、プロジェクト間参照に変換されます。 ソリューションの依存関係の概念とプロジェクト間参照の概念は異なるため、この変更によってアプリケーションに影響が生じることがあります。

マクロと環境変数

新しい _ITERATOR_DEBUG_LEVEL マクロは、反復子に対するデバッグのサポートを呼び出します。 このマクロは、以前の _SECURE_SCL マクロおよび _HAS_ITERATOR_DEBUGGING マクロの代わりに使用します。

Visual C++ のライブラリ

同時実行ランタイム ライブラリ

同時実行ランタイム フレームワークは、同時に実行されるアプリケーションやコンポーネントをサポートし、Visual C++ で同時実行アプリケーションをプログラミングするためのフレームワークとなっています。 並列パターン ライブラリ (PPL) では、同時実行アプリケーション プログラミングをサポートするために、粒度の細かい並列化を実行するための汎用目的コンテナーおよびアルゴリズムが用意されています。 非同期エージェント ライブラリ は、アクター ベースのプログラミング モデルと、粒度の粗いデータ フローおよびパイプライン処理タスクの Message Passing Interface の両方の役割を果たします。

標準 C++ ライブラリ

次のリストは、標準 C++ ライブラリに追加された変更の一部を示しています。

  • 新しい rvalue 参照 C++ 言語機能は、標準テンプレート ライブラリの多くの関数で移動セマンティクスおよび完全転送を実装するために使用されました。 移動セマンティクスと完全転送は、変数またはパラメーターの割り当て操作のパフォーマンスを大幅に向上させます。

  • rvalue 参照はまた、新しい unique_ptr class を実装するためにも使用されています。これは auto_ptr クラスよりも安全なスマート ポインター型です。 unique_ptr クラスは、移動可能ですがコピー可能ではなく、安全性に影響することなく厳密な所有権セマンティクスを実装し、rvalue 参照を認識するコンテナーに適しています。 auto_ptr クラスの使用は推奨されていません。

  • 15 個の新しい関数、たとえば find_if_notcopy_if、および is_sorted が、<algorithm> ヘッダーに追加されました。

  • <memory> ヘッダーの新しい make_shared 関数は、オブジェクトの作成時に、そのオブジェクトに共有ポインターを作成するための便利で堅牢かつ効率的な方法です。

  • シングルリンク リストは <forward_list> ヘッダーによってサポートされています。

  • 新しい cbegin、cend、crbegin、および crend の各メンバー関数には、コンテナーで前方または後方に移動する const_iterator が用意されています。

  • <system_error> ヘッダーおよび関連テンプレートは、低レベルのシステム エラーの処理をサポートします。

  • exception_ptr クラスのメンバーは、スレッド間で例外を転送するために使用できます。

  • <codecvt> ヘッダーは、Unicode 文字のさまざまなエンコードから他のエンコードへの変換をサポートします。

  • <allocators> ヘッダーは、ノード ベース コンテナーのためにメモリ ブロックの割り当てと解放を行うための各種テンプレートを定義します。

  • <random> ヘッダーにはさまざまな更新があります。

MFC (Microsoft Foundation Class) ライブラリ

Windows 7 の機能

MFC は Windows 7 の多くの機能をサポートしています。たとえば、リボン ユーザー インターフェイス (UI)、タスク バー、ジャンプ リスト、タブ化されたサムネイル、サムネイルのプレビュー、プログレス バー、アイコン オーバーレイ、検索インデックス作成などがあります。 MFC は Windows 7 の多くの機能を自動的にサポートしているため、既存のアプリケーションを変更する必要がない場合があります。 新しいアプリケーションで他の機能をサポートするには、MFC アプリケーション ウィザードを使用して、実行する機能を指定します。

マルチタッチ認識

MFC はマルチタッチ ユーザー インターフェイスを持つアプリケーションをサポートしています。これには、Microsoft Surface オペレーティング システム用に書かれたアプリケーションが含まれます。 マルチタッチ アプリケーションは、Windows のタッチ メッセージおよびタッチ メッセージの組み合わせであるジェスチャ メッセージに対応しています。 タッチおよびジェスチャのイベントを扱うようアプリケーションを登録しておくと、オペレーティング システムがマルチタッチ イベントをイベント ハンドラーにルーティングします。

高解像度の認識

MFC アプリケーションは既定で、高解像度認識となりました。 アプリケーションが高解像度 (HDPI: High Dots Per Inch) 認識の場合、オペレーティング システムでは、ウィンドウ、テキスト、その他の UI 要素を現在の画面の解像度に調整できます。 つまり、調整されたイメージは正しいレイアウトで表示され、切り取られたり粗くなったりすることはありません。

再起動マネージャー

再起動マネージャーは、アプリケーションが予期せず終了または再起動した場合に、ドキュメントを自動的に保存してアプリケーションを再起動します。 たとえば、自動更新によってアプリケーションが終了した後に、再起動マネージャーを使用してアプリケーションを起動できます。 再起動マネージャーを使用するためのアプリケーションの構成方法の詳細については、「方法: 再起動マネージャーのサポートを追加する」を参照してください。

CTaskDialog

CTaskDialog クラスは、標準の AfxMessageBox メッセージ ボックスの代わりに使用できます。 CTaskDialog クラスでは、標準のメッセージ ボックスよりも多くの情報を表示して収集できます。

SafeInt ライブラリ

新しい SafeInt ライブラリは、整数のオーバーフローの原因となる算術演算を安全に実行します。 このライブラリは、異なる種類の整数も比較します。

新しい ATL (Active Template Library) マクロ

新しいマクロが ATL に追加され、PROP_ENTRY_TYPE および PROP_ENTRY_TYPE_EX の機能が拡張されました。 PROP_ENTRY_INTERFACE および PROP_ENTRY_INTERFACE_EX では、有効な CLSID のリストを追加できます。 PROP_ENTRY_INTERFACE_CALLBACK および PROP_ENTRY_INTERFACE_CALLBACK_EX では、コールバック関数を指定して、CLSID が有効かどうかを判断できます。

/analyze 警告

ほとんどの /analyze (Enterprise コード分析) 警告が CRT (C ランタイム) ライブラリ、MFC ライブラリ、および ATL ライブラリから削除されました。

アニメーションおよび D2D のサポート

MFC でアニメーションと Direct 2D グラフィックスがサポートされるようになりました。 MFC ライブラリでは、この機能をサポートするためにいくつかの新しい MFC クラスと関数を使用しています。 また、新しい 2 つのチュートリアルで、D2D オブジェクトおよびアニメーション オブジェクトをプロジェクトに追加する方法について説明しています。 このチュートリアルは、チュートリアル: MFC プロジェクトへの D2D オブジェクトの追加 および チュートリアル: MFC プロジェクトへのアニメーションの追加 です。

IDE

Visual C++ 2010 では、生産性を向上させるために、統合開発環境 (IDE: Integrated Development Environment) のパフォーマンス、精度、スケーラビリティ、およびツールが大幅に強化されています。

強化された IntelliSense

Visual C++ の IntelliSense は刷新され、スピードと正確さが増し、より大きいプロジェクトを処理できるようになっています。 IDE はこれを実現するために、開発者がソース コードを表示して変更する方法と、IDE がソリューションを構築するためにソース コードとプロジェクト設定を使用する方法を使い分けています。

この役割分担のおかげで、クラス ビューや新しい [移動] ダイアログ ボックスなどの参照機能は、以前のコンパイルされないブラウザー (.ncb) ファイルに代わる新しい SQL Server デスクトップ データベース (.sdf) ファイルに基づいたシステムによって処理されます 。 クイック インフォメーション、オート コンプリート、パラメーター ヘルプなどの IntelliSense 機能は、必要な場合にのみ翻訳単位を解析します。 新しい [呼び出し階層] ウィンドウなどのハイブリッド機能は、参照機能と IntelliSense 機能の組み合わせを使用します。

IntelliSense はその時点で必要な情報のみを処理するため、IDE の反応はより迅速です。 また、より最新の情報を使用するため、IDE のビューとウィンドウもさらに正確になっています。 最後に、IDE インフラストラクチャの組織、機能、スケーラビリティが優れているため、より大きなプロジェクトを処理できます。

強化された IntelliSense エラー

IDE では、IntelliSense の障害を引き起こす可能性があるエラーの検出機能が強化され、エラーには赤色の波線が表示されます。 また、IntelliSense エラーが [エラー一覧] ウィンドウに表示されます。 問題の原因となっているコードを表示するには、[エラー一覧] ウィンドウでエラーをダブルクリックします。

#include オートコンプリート機能

IDE では、#include キーワードのオートコンプリートがサポートされます。 「#include」と入力すると、IDE によって有効なヘッダー ファイルのドロップダウン リスト ボックスが作成されます。 ファイル名の入力を続けると、入力内容に基づいてリストが自動的にフィルター処理されます。 インクルードするファイルはリスト上で随時選択できます。 これにより、正確なファイル名を知らなくても、ファイルを簡単に選択してインクルードすることができます。

移動

[移動] ダイアログ ボックスでは、指定した文字列と一致するすべてのシンボルやファイルをプロジェクト内で検索できます。 検索文字列に追加の文字を入力していくと、検索結果が瞬時に更新されます。 [結果] フィードバック フィールドでは、見つかった項目の数が表示され、検索を絞り込む必要性を判断するのに役立ちます。 [種類/スコープ][位置]、および [プレビュー] の各フィードバック フィールドは、似た名前の項目を識別するのに役立ちます。 また、この機能を拡張して、他のプログラミング言語をサポートすることもできます。

パラレル デバッグおよびプロファイリング

Visual Studio デバッガーは同時実行ランタイムを認識し、並列処理アプリケーションのトラブルシューティングに役立ちます。 新しい同時実行プロファイラー ツールは、アプリケーションの全体的な動作を視覚化するために使用できます。 さらに、新しいツール ウィンドウを使用して、タスクの状態とその呼び出し履歴も視覚化できます。

リボン デザイナー

リボン デザイナーとは、MFC リボン UI の作成と変更を行うためのグラフィックス エディターです。 最後のリボン UI は XML ベースのリソース ファイル (.mfcribbon-ms) によって表されます。 既存のアプリケーションの場合、何行かのコードを一時的に追加し、リボン デザイナーを呼び出すことによって、現在のリボン UI を取り込むことができます。 リボン リソース ファイルが作成された後、手書きのリボン UI コードを、リボン リソースを読み込む少数のステートメントに置き換えることができます。

呼び出し階層

[呼び出し階層] ウィンドウでは、特定の関数によって呼び出されるすべての関数、または特定の関数を呼び出すすべての関数に移動できます。

ツール

MFC クラス ウィザード

Visual C++ 2010 では、評価の高かった MFC クラス ウィザード ツールが復活しています。 MFC クラス ウィザードを使用すると、ソース ファイルのセットを手作業で変更せずに、クラス、メッセージ、および変数を簡単にプロジェクトに追加できます。

ATL コントロール ウィザード

ATL コントロール ウィザードでは、ProgID フィールドが自動的に設定されなくなりました。 ATL コントロールに ProgID, がない場合、他のツールを使用できないことがあります。 コントロールに ProgID があることを必要とするツールの例としては、[ActiveX コントロールの挿入] ダイアログ ボックスがあります。 このダイアログ ボックスの詳細については、「[ActiveX コントロールの挿入] ダイアログ ボックス」を参照してください。

Microsoft Macro Assembler リファレンス

YMMWORD データ型の追加では、Intel Advanced Vector Extensions (AVX) 命令に含まれている、256 ビットのマルチメディア オペランドがサポートされます。

参照

概念

Visual C++ での互換性に影響する変更点

その他の技術情報

Visual C++ 2010 について