Visual Studio 2013 における Visual C++ の新機能
このドキュメントでは、Visual Studio 2013 の Visual C++ に導入された新機能および強化された機能を紹介します。
Visual Studio 2013 の他の追加機能については、「Visual Studio 2013 の新機能」を参照してください。
ISO C/C++ 標準のサポートの強化
コンパイラ
サポートされる ISO C++11 機能:
関数テンプレートに関する既定のテンプレート引数。
明示的な変換演算子。
削除指定関数。
既定化関数。*
サポートされる ISO C99 機能:
_Bool
複合リテラル。
初期化子の指定。
コードによる宣言の混合。
文字列リテラルから変更可能な値への変換は、新しいコンパイラ オプション /Zc:strictStrings を使用して無効にすることができます。C++98 では、文字列リテラルから char * (およびワイド文字列リテラル wchar_t *) への変換は推奨されていません。C++11 では、変換は完全に削除されました。コンパイラを標準に厳密に準拠させることもできますが、そうではなく、変換を制御できるように /Zc:strictStrings のオプションが用意されています。既定では、このオプションはオフです。デバッグ モードでこのオプションを使用すると、STL はコンパイルされません。
rvalue/lvalue の参照キャスト。 C++11 では、右辺値参照を使用して、左辺値と右辺値を明確に区別できます。以前は、Visual C++ コンパイラは、具体的なキャストのシナリオでこれを実現できませんでした。新しいコンパイラ オプションである /Zc:rvalueCast が追加され、コンパイラが "C++ Language Working Paper (C++ 言語報告書)" (セクション 5.4 [expr.cast]/1 を参照) に準拠するようになりました。
このオプションを指定しない場合の既定の動作は、Visual Studio 2012 の動作と同じです。
[!メモ]
* 既定化関数では、=default を使用したメンバー関数の移動コンストラクターと移動代入演算子の要求はサポートされていません。
C99 ライブラリ
複数のヘッダーで、不足していた関数の宣言と実装が追加されます (math.h、ctype.h、wctype.h、stdio.h、stdlib.h、wchar.h)。また新しいヘッダーとして complex.h、stdbool.h、fenv.h、inttypes.h が追加され、これらのヘッダーで宣言されたすべての関数が実装されます。新しい C++ のラッパー ヘッダー (ccomplex、cfenv、cinttypes、ctgmath) が追加され、複数のヘッダーが更新されます (ccomplex、cctype、clocale、cmath、cstdint、cstdio、cstring、cwchar、cwctype)。詳細については、「C99 library support in Visual Studio 2013 (Visual Studio 2013 での C99 ライブラリのサポート)」を参照してください。
標準テンプレート ライブラリ
C++11 の明示的な変換演算子、初期化子リスト、スコープ指定の列挙型、および可変個引数テンプレートがサポートされています。
すべてのコンテナーは、C++11 の詳細な要素要件をサポートするようになりました。
次の C++14 機能のサポート。
"透過的な演算子のファンクター" less<>、greater<>、plus<>、multiplies<> など。
make_unique<T>(args...) および make_unique<T[]>(n)
cbegin()/cend()、rbegin()/rend()、および crbegin()/crend() の非メンバー関数。
<atomic> で多数のパフォーマンス向上を実現しました。
<type_traits> で安定性の大幅向上とコード修正を行いました。
互換性に影響する変更点
この ISO C/C++ 標準のサポート強化に伴って、既存のコードに変更を加える必要が生じる可能性があります。その結果、コードは C++11 に準拠し、Visual Studio 2013 の Visual C++ で正しくコンパイルできるようになります。詳細については、「Visual C++ での互換性に影響する変更点」を参照してください。
新しい C++11/14 言語と STL 機能の詳細については、「C++11 の機能 (Modern C++) のサポート」および「C++11/14 STL Features, Fixes, And Breaking Changes In Visual Studio 2013 (Visual Studio 2013 における C++11/14 STL の機能、修正、および新しい変更点)」を参照してください
Visual C++ ライブラリの強化
C++ REST SDK を追加しました。この中には、REST サービスに関する C++ の最新の実装があります。詳細については、"C++ REST SDK (C++ REST SDK)" を参照してください。
C++ AMP テクスチャのサポートが強化されました。この中には、ミップマップと新しいサンプリング モードのサポートが含まれます。
PPL タスクは複数のスケジューリング テクノロジおよび非同期デバッグをサポートします。新しい API により、通常の結果と例外条件の両方を対象とする PPL タスクを作成できます。
C++ アプリケーションのパフォーマンス
自動ベクター化は、より多くの C++ のパターンを認識および最適化し、コードをいっそう高速に実行できるようになりました。
ARM プラットフォームと Atom マイクロアーキテクチャ コードの品質が向上しました。
呼び出し規約 __vectorcall が追加されました。ベクター レジスタを使用するための呼び出し規約 __vectorcall を使用して、ベクター型の引数を渡します。
新しいリンカー オプション。/Gw (コンパイラ) と /Gy (アセンブラー) スイッチにより、より効率的なバイナリを生成するためのリンカー最適化が有効になります。
C++ AMP の共有メモリのサポート。これにより、CPU と GPU との間でのデータ コピーが減少するか、不要になります。
ガイド付き最適化のプロファイル (Profile Guided Optimization、PGO) が次のように強化されました。
PGO を使用して最適化されたアプリケーションのワーキング セットの縮小を通じてパフォーマンスを向上させました。
Windows ストア アプリケーション開発用の新しい PGO。
Windows ストアアプリケーション開発サポート
Value 構造体の中でのボックス化された値のサポート。 null にすることができるフィールドを使用して、値の型を定義できます。たとえば、intではなく、IBox<int>^ です。つまり、これらのフィールドは値を持つことも、または nullptr に等しくすることもできます。
よりリッチな例外情報。 C++/CX は新しい Windows エラー モデルをサポートし、アプリケーション バイナリ インターフェイス (ABI) を通じたリッチな例外情報の伝達とキャプチャを可能にします。その中には、呼び出し履歴とカスタム メッセージ文字列が含まれます。
Object::ToString () は、仮想メソッドになりました。 ユーザー定義の Windows ランタイムの参照型の中で、ToString をオーバーライドできるようになりました。
推奨されていない API のサポート。 Public Windows ランタイム API は、"使用を推奨されていない" というマークを付けられ、ビルドの警告として表示されるカスタム メッセージを付与され、移行のガイドラインが提供されるようになりました。
デバッガーの強化。 ネイティブ/JavaScript ネの相互運用機能デバッグ、Windows ランタイムの例外診断、非同期コードのデバッグ (Windows ランタイムと PPL の両方) をサポートします。
[!メモ]
ここで説明する C++ 固有の機能と拡張機能に加えて、Visual Studio 内の他の拡張機能も、より適切な Windows ストア アプリケーションの開発に役立ちます。これらの機能の詳細については、Windows 8.1 機能ガイドを参照してください。新しいアプリ テンプレートの詳細については、「Windows ストア アプリ用の C#、VB、C++ プロジェクト テンプレート」を参照してください。新しいプラットフォームの機能の一覧については、「Windows 8.1 Preview: 新しい API と機能」を参照してください。
診断の強化
デバッガーの強化。 非同期デバッグと マイ コードのみのデバッグのサポート。
コード分析カテゴリ。 これで、コード アナライザーからの出力を分類して表示し、コードの欠陥を検出して修正することができます。
XAML 診断 XAML 内での UI の応答性やバッテリ使用の問題を診断できるようになりました。
グラフィックスと GPU のデバッグの強化。
実際のデバイス上でのリモート キャプチャと再生。
AMP C++ と CPU の同時デバッグ。
C++ AMP ランタイム診断の強化。
HLSL 計算シェーダー トレースのデバッグ。
3-D グラフィックスの強化
イメージ コンテンツ パイプラインによる、プリマルチプライされたアルファ DDS 形式のサポート。
イメージ エディターは、内部でプリマルチプライされたアルファを使用してレンダリングを行い、その結果、濃いにじみのようなレンダリングの副産物を回避できます。
イメージ エディターとモデル エディター。 イメージ エディターとモデル エディターのシェーダー デザイナー モードで、ユーザー定義フィルターの作成がサポートされるようになりました。
IDE と生産性
Visual Studio IDE は、C++ のコーディング生産性をさらに向上させるために、大きな改良を加えられました。
強化されたコード形式。 C++ コードに、さらに多くの書式設定を適用できます。これらの設定を使用することにより、中かっことキーワードに関連する改行位置、インデント、スペース入力、および行の折り返しを制御できます。 ステートメントとブロックを完了させたとき、およびファイルにコードを貼り付けたときに、コードが自動的に書式設定されます。書式設定を変更するには、Visual Studio のメニュー バーで [ツール]、[オプション] の順にクリックし、[テキスト エディター]、[C/C++]、[書式設定] の各ノードを順に展開してから変更を加えます。これらのオプションにアクセスするために、[クイック起動] ボックスを使用することもできます。
中かっこの補完。 C++ コードで、これらの開始文字に対応する終了文字が自動補完されるようになりました。
{ (中かっこ)
[ (角かっこ)
( (かっこ)
' (単一引用符)
" (二重引用符)
追加の C++ オート コンプリート機能。
クラス型を表すセミコロンを追加します。
未加工リテラル文字列のかっこを補完します。
複数行コメント (/* */) を補完します
[すべての参照の検索] は、一致するテキストの一覧を表示した後、参照の解決とフィルター処理をバックグラウンドで自動的に実行するようになりました。 参照の解決を無効にするには、Visual Studio のメニュー バーの [ツール]、[オプション] の順にクリックし、[テキスト エディター]、[C/C++]、[詳細設定] の各ノードを順に展開し、[参照] の下にある [解決の無効化] 設定を変更します。
中かっこの補完の設定を変更するには、Visual Studio のメニュー バーで [ツール]、[オプション] の順にクリックし、[テキスト エディター]、[C/C++]、[全般] の各ノードを順に展開してから変更を加えます。また、[テキスト エディター]、[すべての言語]、[全般] の各ノードを展開すると、Visual Studio のすべての言語の設定を変更できます。
C++ 固有の設定を変更するには、メニュー バーで [ツール]、[オプション] の順にクリックし、[テキスト エディター]、[C/C++]、[詳細] の各ノードを順に展開してから変更を加えます。
コンテキスト ベースのメンバー一覧のフィルター処理。 アクセス不可能なメンバーは、IntelliSense のメンバー一覧から除外されます。 たとえば、プライベート メンバーは、型を実装するコードを変更しない限り、メンバー一覧の中に表示されません。メンバーの一覧が開いている間、Ctrl+J キーを押してフィルター処理を 1 レベル削除することもできます (現在のメンバーの一覧ウィンドウにのみ適用されます)。もう一度 Ctrl+J キーを押してテキストのフィルター処理を解除し、すべてのメンバーを表示することもできます。
パラメーター ヘルプのスクロール。 任意のシグネチャを表示するだけの動作や、現在のコンテキストに基づいてシグネチャを更新しない動作以外に、パラメーター ヘルプのツールヒントの中に表示される関数シグネチャが、実際に入力したパラメーターの数に基づいて変化するようになりました。パラメーター ヘルプの表示が、入れ子になった関数に対しても正しく機能するようになりました。
ヘッダー/コード ファイルの切り替え。 ショートカット メニューのコマンドまたはキーボード ショートカットを使用して、ヘッダー ファイルとそれに対応するコード ファイルの間で切り替えを実行できるようになりました。
サイズ変更可能な C++ プロジェクトのプロパティ ウィンドウ。
C++/CX および C++/CLI 内でのイベント ハンドラー コードの自動生成。 C ++/CX または C++/CLI コード ファイル内で、イベント ハンドラーを追加するためにコードを入力しているときに、エディターでデリゲート インスタンスとイベント ハンドラー定義を自動的に生成できます。イベント ハンドラー コードが自動生成できる場合に、ツールヒント ウィンドウが表示されます。
DPI 対応の拡張。 アプリケーション マニフェスト ファイルに対する DPI 対応設定は、[モニターごとの高い DPI 認識] をサポートするようになりました。
構成の高速切り替え。 大規模なアプリケーションでは、構成の切り替え、特に後続の切り替え操作がより迅速に実行されるようになりました。
ビルド時間の効率。
- より高速なビルド。 多数の最適化と、マルチコアの活用により、特に大規模プロジェクトで、ビルドがさらに高速になりました。C++ の WinMD を参照している C++ アプリケーションのインクリメンタル ビルドも非常に高速になりました。
IDE 内の他の追加機能と強化された機能については、"Visual Studio 2013 の新機能 (Visual Studio 2013 Preview の新機能)" およびその記事を参照する他の記事を参照してください。