Visual Studio 2022 の C++ の新機能
Visual Studio 2022 では、Microsoft C++ コンパイラおよびツールに対する多くの更新と修正が導入されています。 また、Visual Studio IDE はパフォーマンスと生産性が大幅に向上し、64 ビット アプリケーションとしてネイティブに実行されるようになりました。
- Visual Studio 全体の新機能の詳細については、「Visual Studio 2022 の新機能」を参照してください。
- C++ ドキュメントの新着記事については、Microsoft C++ ドキュメントの新着記事に関するページを参照してください。
- バージョンのビルド日の詳細については、「Visual Studio 2022 リリース履歴」を参照してください。
Visual Studio バージョン 17.11 の C++ の新機能
リリース日: 2024 年 8 月
詳細情報: | 参照トピック |
---|---|
C++ 開発者向けの新着情報 | Visual Studio 2022 17.11 の C++ 開発者向けの新機能 |
標準ライブラリ (STL) にマージされた C++26 と C++23 の機能、C++20 の瑕疵レポート、LWG の問題の解決、パフォーマンスの改善、動作の強化、バグ修正 | STL Changelog 17.11 |
Visual Studio 17.11 IDE の新機能 | Visual Studio 2022 バージョン 17.11 リリース ノート |
Visual Studio 2022 17.11 での C++ 言語準拠の機能強化 | Visual Studio 2022 17.11 での C++ 準拠の機能強化、動作の変更、バグ修正 |
新機能の部分的リスト:
標準ライブラリの機能強化:
- 書式設定された出力実装に、
std::pair
とstd::tuple
のstd::range_formatter
とフォーマッタが含まれるようになりました。 - 引数なしの
std::println()
のサポートを追加しました。 これにより、 P3142R0で提案された空白行が出力されます。 replace_copy()
、replace_copy_if()
、ranges::replace_copy
、ranges::replace_copy_if
、find_first_of()
、ranges::find_first_of
など、8 ビット要素と 16 ビット要素、mismatch()
、ranges::mismatch
、count()
ranges::count
、find()
、ranges::find
、ranges::find_last
、ranges::iota
など、いくつかのアルゴリズムのベクター化が改善されました。
- 書式設定された出力実装に、
C++ でのゲーム開発
- Visual Studio 内から一般的な Unreal Engine クラス テンプレート、モジュール、プラグインを追加できるようになりました。 詳細については、「 Visual Studio での Unreal Engine のクラス、モジュール、プラグインの追加を参照してください。
- 新しい Unreal Engine ツール バーを使用すると、Visual Studio 内から Unreal Engine 関連のアクションにすばやくアクセスできます。 ツール バーを使用すると、Unreal Engine プロセスにすばやくアタッチしたり、ブループリント キャッシュを再スキャンしたり、Unreal Engine Log にすばやくアクセスしたり、Visual Studio の Unreal Engine 構成ページにすばやくアクセスしたりできます。 詳細については、「 Unreal Engine Toolbar」を参照してください。
- これで、プロジェクト別にトレース結果をフィルター処理できるようになりました。 また、各行には、完全パスではなく相対パスとファイル名が表示されます。 Included Files ビューでの結果のグループ化も改善されました。
[インクルード ファイル] ビューには、プロジェクトの新しい列があります。 [プロジェクト] 列が選択され、(すべて選択)、CompilerIdC、OpenAL、common などのプロジェクトが選択されます。 含まれるファイルは、相対パスとファイル名で一覧表示され、グループ化されます。
CMake デバッグ
- Linux 用 Windows サブシステム (WSL) または SSH 経由で Linux を対象とする CMake プロジェクト用の Visual Studio デバッガーで、CMake スクリプトと
CMakeLists.txt
ファイルをデバッグできるようになりました。 Visual Studio で CMake デバッグ セッションを開始するには、CMakeLists.txt
ファイルにブレークポイントを設定し、 Project>CMake デバッグを使用したキャッシュの構成に移動します。
- Linux 用 Windows サブシステム (WSL) または SSH 経由で Linux を対象とする CMake プロジェクト用の Visual Studio デバッガーで、CMake スクリプトと
Copilot
- コード エディターでシンボルにカーソルを合わせると、[クイック ヒント] ダイアログの [Copilot 詳細 ボタンをクリックして、特定のシンボルの詳細を確認します。
クイック ヒント ウィンドウは、関数の上に表示されます。 [詳細を教えてください] リンクが強調表示されています。
- GitHub Copilot では、識別子の使用方法とコードのスタイルに基づいて、識別子 (変数、メソッド、またはクラス) の名前付けの提案を生成できます。
[名前の変更] ダイアログには、[新しい名前] フィールドがあり、ドロップダウン リストにtext_color、font_color、display_color、console_color、menu_text_colorが表示されます。
アクティブな GitHub Copilot サブスクリプションが必要です。 名前を変更する変数を右クリックし、 Rename (
Ctrl+R
、Ctrl+R
) を選択します。 GitHub Copilot のきらめきアイコンを選択して、名前付けの提案を生成します。デバッグ
- C++ の条件付きブレークポイントの方が大幅に高速です。
診断機能の強化
- テンプレート引数に複数の
T
インスタンスがあるstd::tuple
でstd::get<T>
を呼び出すときの診断が改善されました。 レポートに使用される MSVC:
error C2338: static_assert failed: 'duplicate type T in get<T>(tuple)'
.
次に、次の内容を報告します。
error C2338: static_assert failed: 'get<T>(tuple<Types...>&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'
std::ranges::to
が要求された結果を構築できない場合の診断が改善されました。 レポートに使用される MSVC:
error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'
次に、次の内容を報告します。
error C2338: static_assert failed: 'ranges::to requires the result to be constructible from the source range, either by using a suitable constructor, or by inserting each element of the range into the default-constructed object. (N4981 [range.utility.conv.to]/2.1.5)'
- テンプレート引数に複数の
Visual Studio バージョン 17.10 における C++ に関する新着情報
2024 年 5 月リリース
詳細情報: | 参照トピック |
---|---|
C++ 開発者向けの新着情報 | Visual Studio 2022 17.10 の C++ 開発者向けの新機能 |
標準ライブラリ (STL) にマージされた C++26 と C++23 の機能、C++20 の瑕疵レポート、LWG の問題の解決、パフォーマンスの改善、動作の強化、バグ修正 | STL 変更ログ 17.10 |
Visual Studio 17.10 IDE の新機能 | Visual Studio 2022 バージョン 17.10 リリース ノート |
Visual Studio 2022 17.10 における C++ 言語への準拠性の改善 | Visual Studio 2022 17.10 における C++ への準拠性の改善、動作変更、バグ修正 |
新機能の部分的リスト:
- MSVC ツールセットの更新: MSVC ツールセットのバージョンが 19.39 から 19.40 に更新されます。 これは、バージョンの前提条件を持つプロジェクトに影響を及ぼす可能性があります。 これが MSVC バージョンがすべて 19.3X for Visual Studio 2022 リリースであると想定するプロジェクトに影響を与えるいくつかの原因の詳細については、「VS 2022 v17.10 の MSVC ツールセット マイナー バージョン番号 14.40」を参照してください。
- 標準ライブラリの機能強化: 標準ライブラリでは、 P2510R3書式設定ポインターのサポートが追加されました。これにより、
std::format
を使用する場合のポインターの書式指定子のセットが、既に整数に存在するものに沿って表示されます。std::min_element
、std::ranges::min
、およびフレンドのベクトル化された実装を改善しました。 - Build Insights: テンプレートのインスタンス化情報を提供するようになりました。 「Visual Studio の Build Insights のテンプレート ビュー」または「Pure Virtual C++ - Visual Studio の Build Insights のテンプレート ビュー」の録画を参照してください。
- Unreal Engine プラグイン: Unreal Engine プラグインをバックグラウンドで実行し、スタートアップ コストを削減するための新しいオプトイン機能が導入されました。 これは、[ツール]>[オプション]>[Unreal Engine] を介してアクティブ化されるオプトイン機能です。
- Linux 向けの新機能: 「Visual Studio における新しい Linux 開発機能」を参照してください。
- CMake ターゲット: [CMake ターゲット ビュー] にターゲットをピン留めできるようになりました。
- 接続マネージャー UX: このユーザー エクスペリエンスは、リモート システムに接続する際のよりシームレスなエクスペリエンスを提供します。 詳細については、「Visual Studio 接続マネージャーの操作性の改善」を参照してください。
- pull request コメント: GitHub と Azure DevOps のコメントを作業ファイル内で直接確認できるようになりました。 利用を開始するには、[オプション]>[環境]>[プレビュー機能] で機能フラグである pull request コメントを有効にして pull request ブランチをチェックアウトします。
- AI 生成コンテンツ: GitHub Copilot で pull request の説明を下書きできるようになりました。 アクティブな GitHub Copilot サブスクリプションが必要です。 これを試すには、[pull request の作成] ウィンドウ内の [AI によって生成された pull request の説明の追加] というきらめくペンのアイコンをクリックします。
- 画像プレビュー: 画像パスの上にホバーすることで、サイズの詳細と共にプレビューが表示されます。 サイズは幅が 500 px で高くなります。
マウスは std::filesystem::path vs_logo_path = "../images/vs_logo.png" という行の上にホバーしています。 その下には、Visual Studio ロゴのプレビューと、251 x 500 ピクセル、13.65 KB のサイズの情報が表示されます。
- ブレークポイント/トレースポイントの作成: ポップアップ メニューを使用してソース コード内の式から条件付きブレークポイントまたはトレースポイントを直接作成できるようになりました。 これは、自動変数、ローカル変数、ウォッチ ウィンドウ、または DataTips のプロパティまたはフィールドの名前と値に対して機能します。
- [プロセスにアタッチ] ダイアログ: [プロセスにアタッチ] ダイアログによって提供される機能がよりユーザー フレンドリになりました。 また、ツリー ビューとリスト ビューの簡単な切り替え、折りたたみ可能なセクションによるプロセスのより適切な整理、簡略化されたコンボボックスを使用したコードの種類の選択が可能になりました。 また、"ウィンドウの選択/追跡" 機能が使いやすくなり、双方向の追跡 (プロセスの選択によってそのウィンドウが強調表示され、ウィンドウ上のクリックによってプロセスが選択されます) が可能になりました。
- GitHub Copilot 統合: GitHub Copilot と Copilot Chat 拡張機能が統合され、Visual Studio に直接出荷されるようになりました。 これをインストールするには、以下のように Visual Studio インストーラーで GitHub Copilot コンポーネントをインストールします。
GitHub Copilot インターフェイスは、Visual Studio の右上隅にあります。 これを使用するには、アクティブな GitHub Copilot サブスクリプションが必要です。
Visual Studio の右上隅に GitHub Copilot ボタンが表示されます。 これには、[チャット ウィンドウを開く]、[GitHub Copilot の設定]、[詳細の表示]、[コパイロット サブスクリプションの管理] という選択肢が含まれています。
Visual Studio バージョン 17.9 における C++ に関する新着情報
2024 年 2 月リリース
詳細情報: | 参照トピック |
---|---|
C++ 開発者向けの新着情報 | Visual Studio 2022 17.9 の C++ 開発者向けの新機能 |
標準ライブラリ (STL) にマージされた C++23 の機能、パフォーマンスの改善、動作の強化、LWG の問題の解決、バグ修正 | STL 変更ログ 17.9 |
Visual Studio 17.9 IDE の新機能 | Visual Studio 2022 バージョン 17.9 リリース ノート |
Visual Studio 2022 17.9 における C++ 言語への準拠性の改善 | Visual Studio 2022 における C++ への準拠性の改善、動作変更、バグ修正 |
C++ バックエンドの更新の概要 | Visual Studio 2022 バージョン 17.3 以降の MSVC バックエンドの更新 |
新機能の部分的リスト:
#include
ディレクティブの詳細な分析を提供する#include
診断。 この機能をアクティブにするには、#include
を右クリックして [#include ディレクティブ]>[#include ディレクティブ診断の有効化] を選択します。 それぞれの#include
の上には、コードがその#include
ファイルを参照している回数が表示されます。 コードがそのヘッダー ファイルの何かを使用している場所に移動するには [参照] リンクをクリックします。#include
ディレクティブのビルド時間を確認するには、[ビルド]>[ソリューション上で Build Insights を実行]>[ビルド] に移動して Build Insights を実行します。#include の上には **reference** リンクがあり、この # インクルード ファイルへの参照の多く (この場合は 1) です。 ビルド時間も表示されます (この場合は 1/2 秒未満)。
- クラス、構造体、共用体用のメモリがどのように配置されているかを示すメモリ レイアウトの視覚化。 型の上にホバーして、[クイック ヒント] 内の [メモリ レイアウト] リンクを選択し、選択された型のメモリ レイアウトを表示する専用ウィンドウを開きます。 このウィンドウ内の個々のデータ型の上にホバーすることで、その型内のサイズとオフセットに関する詳細情報が表示されます。
メモリ レイアウト ウィンドウには、Snake クラスの内容が表示されます。 Point クラスの head と body の位置、score など、そのクラスのさまざまフィールドのメモリ オフセットが表示されます。
- 独自のカスタム CMake 実行可能ファイルを指定できるようになりました。 この機能は、Visual Studio に付属していない特定のバージョンの CMake を使用したい場合に役に立ちます。 [ツール]>[オプション] に移動して [CMake]>[全般] を選択します。 [カスタムの CMake 実行可能ファイルを有効にする] を選択し、CMake 実行可能ファイルのディレクトリ パスを指定します。
"カスタムの CMake 実行可能ファイルを有効にする" オプションと "CMake 実行可能ファイルのディレクトリ" フィールドが強調表示された [CMake オプション] ダイアログ。
- Unreal Engine プロジェクトの IntelliSense の改善。
- 改善された C++23 のサポート:
std::format
とstd::span
のformattable
、range_format
、format_kind
、および P0009R18 を通した P2286R8 Formatting Ranges<mdspan>
の一部としてのset_debug_format()
、そしてその後に C++23 標準に対して適用された用語の変更。 また、format()
は P2510R3 を通してポインターを書式設定することができます。
Visual Studio バージョン 17.8 での C++ の新機能
2023 年 11 月リリース
詳細情報: | 参照トピック |
---|---|
C++ 開発者向けの新着情報 | Visual Studio 2022 17.8 の C++ 開発者向けの新機能 |
標準ライブラリ (STL) にマージされた C++26、C++23 の機能、C++20 拡張機能、LWG の問題の解決、パフォーマンスの改善、動作の強化、バグ修正 | STL 変更ログ 17.8 |
Visual Studio 17.8 IDE の新機能 | Visual Studio 2022 バージョン 17.8 リリース ノート |
Visual Studio 2022 17.8 における C++ 言語への準拠性の改善 | Visual Studio 2022 における C++ への準拠性の改善、動作変更、バグ修正 |
2023 年の間の Visual Studio、VS Code、vcpkg における C++ に関する改善の概要 | C++ の 1 年間の機能強化 |
新機能の部分的リスト:
- [出力] ウィンドウの C++ 構造化診断と、エラーに関する詳細情報を提供する新しい [問題の詳細] ウィンドウ。 詳細については、「構造化された SARIF 形式の出力」と「[問題の詳細] ウィンドウ」を参照してください。
- コードがコンパイルされる前であっても、クラス、構造体、共用体、基本型、列挙型のサイズと配置を視覚化できる機能。 識別子にカーソルを合わせると、[クイック ヒント] にサイズと配置情報が表示されます。
- オブジェクトの状態を変更しないメンバー関数
const
をマークするタイミングを提示する機能。 メンバー関数にカーソルを合わせ、電球アイコンをクリックして関数をconst
としてマークします。 - Visual Studio では、関数名ごとに表示されるねじ回しアイコンを介して、グローバル関数を静的とマークするように求めるメッセージが表示されるようになりました。 ねじ回しアイコンをクリックして、関数を静的とマークします。
- 未使用の #include ディレクティブはエディターで淡色表示されます。 淡色表示されたインクルードにカーソルを合わせ、電球メニューを使用して、そのインクルードを削除するか、未使用のインクルードをすべて削除できます。 また、他のヘッダーを介して間接的に取り込まれるエンティティ用の
#include
ディレクティブを追加することもできます。 詳細については、「Visual Studio で C/C++ インクルードをクリーンアップする」を参照してください。 - Unreal Engine の以下のサポートが追加されました。
- Unreal Engine テスト アダプター。Visual Studio IDE を離れることなく、Unreal Engine テストを検出、実行、管理、デバッグできます。
- Unreal Engine コード スニペット。メンバー リストで一般的な Unreal Engine コンストラクトをスニペットとして検索できます。
- Build Insights。Visual Studio 2022 と統合され、MSVC を使用して MSBuild および CMake プロジェクトで動作するようになりました。 コンパイルにかかった時間や ForceInline の数、およびビルド時間に対するヘッダー ファイルの影響など、関数のコンパイルに関する追加情報を確認できるようになりました。 詳細については、「チュートリアル: ビルド時間に対する関数のインライン化の影響のトラブルシューティング」および「チュートリアル: ビルド時間に対するヘッダー ファイルの影響のトラブルシューティング」を参照してください。
- Linux でリモート単体テストがサポートされ、ローカル テストと同様に、Visual Studio のテスト エクスプローラーから遠隔にある Linux マシンで CTest テストと GTest テストを実行できるようになりました。
Visual Studio バージョン 17.7 での C++ の新機能
2023 年 8 月リリース
詳細情報: | 参照トピック |
---|---|
C++ 開発者向けの新着情報 | Visual Studio 2022 17.7 の C++ 開発者向けの新機能 |
ゲーム開発に固有の新しい C++ 機能 | C++ によるゲーム開発のための Visual Studio 2022 の力の解放 |
標準ライブラリ (STL) にマージされた C++23 機能、LWG の問題の解決、パフォーマンスの改善、動作の強化、バグ修正 | STL 変更ログ 17.7 |
Visual Studio 17.7 IDE の新機能 | Visual Studio 2022 バージョン 17.7 リリース ノート |
Visual Studio 2022 17.7 における C++ 言語への準拠性の改善 | Visual Studio 2022 における C++ への準拠性の改善、動作変更、バグ修正 |
新機能の部分的リスト:
- デバッグ セッションの高速化とプロジェクトの読み込み時間の短縮
- マクロ拡張のステップバイステップの視覚化
- Linux 用 Windows サブシステム (WSL) のワンクリック ダウンロード
- Doxygen のコメントのサポート強化
- ゲーム開発用の C++ Build Insights
/std:clatest
が C コンパイラ用に追加されました。- IntelliSense の高速化や構文の色付け、すべての Unreal Engine Blueprint 参照の検索機能といった、Unreal Engine プロジェクトの機能強化。
Visual Studio バージョン 17.6 での C++ の新機能
2023 年 5 月リリース
詳細情報: | 参照トピック |
---|---|
C++ 開発者向けの新着情報 | Visual Studio 2022 17.6 における C++ 開発者向けの新着情報 |
標準ライブラリ (STL) にマージされた C++23 機能、LWG の問題の解決、パフォーマンスの改善、動作の強化、バグ修正 | STL 変更ログ 17.6 |
Visual Studio 17.6 IDE の新機能 | Visual Studio 2022 バージョン 17.6 リリース ノート |
Visual Studio 2022 17.6 における C++ 言語への準拠性の改善 | Visual Studio 2022 における C++ への準拠性の改善、動作変更、バグ修正 |
新機能の部分的リストには、以下のものが含まれます。
- CMake スクリプトのデバッグ
- 上位レベル シェーダー言語 (HLSL) の組み込みサポート
- Unreal Engine ログ ビューアー
- vcpkg が既定で追加されるようになりました
- C++/CLI プロジェクトでの C++20 の初期サポートと、範囲に関するいくつかの C++23 標準ライブラリ機能。
Visual Studio バージョン 17.5 での C++ の新機能
2023 年 2 月リリース
詳細情報: | 参照トピック |
---|---|
C++ 開発者向けの新着情報 | Visual Studio 2022 17.5 における C++ 開発者向けの新着情報 |
標準ライブラリ (STL) にマージされた C++23 機能、LWG の問題の解決、パフォーマンスの改善、動作の強化、バグ修正 | STL 変更ログ 17.5 |
Visual Studio 17.5 IDE の新機能 | Visual Studio 2022 バージョン 17.5 リリース ノート |
新機能の部分的リストには、以下のものが含まれます。
std::move
、std::forward
、std::move_if_noexcept
、std::forward_like
は、デバッグ モードであっても、生成されるコードで関数呼び出しを生成しなくなりました。 この変更により、デバッグ ビルドで不要なオーバーヘッドが発生する名前付きキャストが行われなくなります。/permissive-
(または、/std:c++20
やstd:c++latest
など、それを意味するオプション) が必要です。[[msvc::intrinsic]]
を追加しました。 この属性は、1 つのキャストで構成され、パラメーターを 1 つだけ受け取る、非再帰関数に適用できます。統合ターミナルでの Linux コンソールのサポートが追加されました。これにより、ターミナル I/O が可能になります。
C11 アトミック プリミティブ (
<stdatomic.h>
) の初期試験的サポートが追加されました。 この実験的な機能は、/std:c11
モード以降で/experimental:c11atomics
オプションを使って有効にできます。ノイズを低減するために、ライフタイム チェッカーに新しい一連の実験的な高信頼度チェックが追加されました。
新しいプレビュー機能であるリモート ファイル エクスプローラーを使うと、VS 内でリモート マシン上のファイル ディレクトリを表示し、ファイルをそれにアップロードおよびダウンロードできます。
Visual Studio に付属する CMake 実行可能ファイルのバージョン管理が、Kitware のバージョンと一致するように変更されました。
CMake プロジェクト テンプレートにホット リロードのサポートが追加されました。
C++ の [定義へ移動] で、以前のバージョンのモーダル ダイアログの代わりに、操作に時間がかかることを示すより微妙なインジケーターが使われるようになりました。
C++ オートコンプリートとメンバー リストにいっそうスマートな結果を提供する実験のロールアウトを開始しました。 この機能は、以前は予測 IntelliSense と呼ばれていましたが、新しい表示方法を使用するようになりました。
LLVM ワークロードを含むネイティブの Arm64 Clang ツールセットを出荷するようになったので、Arm64 マシンでネイティブ コンパイルできるようになりました。
Image Watch 拡張機能にローカライズが追加されました (この拡張機能は Marketplace で入手でき、Visual Studio インストーラーにはバンドルされていません)。
現在実行中の開発者コンテナーにターミナル ウィンドウを開くためのサポートが追加されました。
IntelliSense のマクロ展開にいくつかの機能強化が行われました。 特に、より多くのコンテキストで再帰的な展開を有効にし、展開をクリップボードにコピーしたり、マクロをインラインで展開したりするためのオプションをポップアップに追加しました。
シリアル モニターで同時監視がサポートされるようになりました。 同時監視を使用すると、複数のポートを同時に並べて監視できます。 プラス ボタンをクリックすると、別のシリアル モニターが開いて作業を始められます。
Visual Studio から離れることなく、Unreal Blueprint アセットで変更された基底クラスのプロパティを表示できるようになりました。 C++ のクラスまたはプロパティの Blueprint 参照でダブルクリックして、Visual Studio で UE アセット インスペクターを開きます。
リモート Linux マシンで DevContainers を実行できるようになりました。
CMake ターゲット ビューで複数のターゲットを選んでビルドできるようになりました。
CMakePresets.json バージョン 5 のサポートが追加されました。 新機能について詳しくは、CMake のドキュメントをご覧ください。
テスト エクスプローラーで複数の CMake ターゲットを並列でビルドしてテストできるようになりました。
Dev Containers に "ターミナルでコンテナーを開く" オプションを追加しました。
実装された標準ライブラリの機能:
Visual Studio バージョン 17.4 での C++ の新機能
2022 年 11 月リリース
詳細情報: | 参照トピック |
---|---|
C++ 開発者向けの新着情報 | Visual Studio 2022 17.4 における C++ 開発者向けの新着情報 |
標準ライブラリ (STL) にマージされた C++23 機能、LWG の問題の解決、パフォーマンスの改善、動作の強化、バグ修正 | STL 変更ログ 17.4 |
Visual Studio 17.4 IDE の新機能 | Visual Studio 2022 バージョン 17.4 リリース ノート |
Visual Studio 2022 17.4 における C++ 言語への準拠性の改善 | Visual Studio 2022 における C++ への準拠性の改善、動作変更、バグ修正 |
17.4 の新機能の部分的リスト:
コンパイラ エラー メッセージが向上し、特に概念に関して、より正確で有用な情報が提供されます。
構造化された SARIF 診断を指定したディレクトリに出力する実験的な MSVC オプション、
/experimental:log<directory>
を追加しました。IntelliSense に C23 属性のサポートを追加し、C++ 20 モジュールのサポートを継続的に進めました。
新しいソリューションを開くときのインデックス作成のパフォーマンスが向上しました。 17.3 以降、大規模なプロジェクトでは 20 から 35% の向上が見られる可能性があります。
名前付きの戻り値の最適化 (NRVO) が次のように向上しています。
- 例外処理またはループが関与するケースに対して NRVO が有効になります。
- NRVO は、
/Od
の下でも、ユーザーが/Zc:nrvo
オプション、または/std:c++20
以降、または/permissive-
を渡した場合は有効になります。 /Zc:nrvo-
オプションを使用して NRVO を無効にできるようになりました。
Visual Studio に付属する LLVM のバージョンを 15.0.1 にアップグレードしました。 使用可能な内容の詳細については、LLVM および Clang のリリース ノートを参照してください。
CMake プロジェクトでの vcpkg 成果物のサポートが Visual Studio に追加されました。 vcpkg マニフェストが含まれるプロジェクトでは、プロジェクトを開くと自動的に環境がアクティブになります。 この機能の詳細については、Visual Studio での vcpkg 環境のアクティブ化のブログ投稿を参照してください。
C++ プロジェクトで Dev Containers を使用できるようになりました。 この機能の詳細については、C++ のための Dev Containers に関するブログ投稿を参照してください。
IntelliSense で、事前インクルードされたヘッダーのうち 1 つが PCH であるときにヘッダーの順序が尊重されるようになりました。 以前は、
/Yu
を指定して PCH を使い、/FI
を指定して強制的にインクルードした場合、IntelliSense では、/FI
を指定してインクルードした他のヘッダーよりも前に、常にこれを最初に処理していました。 この動作はビルドの動作と一致していませんでした。 この変更により、/FI
のヘッダーは指定された順序で処理されます。テスト エクスプローラーの CTest 名から内部プレフィックスを削除しました。
Visual Studio に付属する CMake のバージョンをバージョン 3.24.1 にアップグレードしました。 使用可能な内容の詳細については、CMake のリリース ノートを参照してください。
Android SDK の更新:
- Ant スクリプトが削除されたので、[新しいプロジェクト] ダイアログに Ant ベースのテンプレートが表示されなくなりました。 Ant テンプレートから Gradle テンプレートへの移行のヘルプについては、Apache Ant からのビルドの移行に関するページを参照してください。
- NDK 23 および 24 を使ったビルドのサポートを追加しました
- NDK コンポーネントを LTS バージョン 23 に更新しました
ranges::min_element()
、ranges::max_element()
、ranges::minmax_element()
のベクトル化された実装を追加しました引き続き C++ 標準化における最新の開発に追従します。 これらの C++23 の機能のサポートは、コンパイラ オプションに
/std:c++latest
を含めることで利用できます。P2302R4
ranges::contains
、ranges::contains_subrange
P2499R0
string_view
範囲コンストラクターをexplicit
にする必要があるP0849R8
auto(x)
: 言語内の decay-copy(コンパイラ部分はまだ実装されていません。ライブラリ部分は C++ 20 モードで Ranges サポートの初期実装時に実装されました。)
P0881R7
<stacktrace>
P2301R1
std::stacktrace
用にpmr
の別名を追加するP1328R1
constexpr type_info::operator==()
P2440R1
ranges::iota
、ranges::shift_left
、ranges::shift_right
P2441R2
views::join_with
"宣言/定義の作成後のナビゲーション" オプションが追加され、[宣言/定義の作成] 機能のナビゲーション動作を選択できるようになりました。 クイック表示 (既定値)、ドキュメントを開く、またはナビゲーションなしのいずれかを選択できます。
Visual Studio の Arm64 ビルドは、Arm64 バージョンの CMake と Ninja をバンドルするようになりました。
CMake Presets バージョン 4 のサポートを追加しました。 使用可能な内容の詳細については、CMake のリリース ノートを参照してください。
接続マネージャーを使用するリモート システム接続で SSH ProxyJump がサポートされるようになりました。 ProxyJump は、SSH ホストに別の SSH ホスト経由でアクセスするために使用されます (たとえば、ファイアウォールの背後にあるホストにアクセスするため)。
Visual Studio バージョン 17.3 での C++ の新機能
2022 年 8 月リリース
詳細情報: | 参照トピック |
---|---|
C++ 開発者向けの新着情報 | 17.3 における C++ に関する改善 |
標準ライブラリ (STL) にマージされた C++23 機能、LWG の問題の解決、パフォーマンスの改善、動作の強化、バグ修正 | STL 変更ログ 17.3 |
Visual Studio 17.3 IDE の新機能 | Visual Studio 2022 バージョン 17.3 リリース ノート |
Visual Studio 2022 17.3 における C++ 言語への準拠性の改善 | Visual Studio 2022 における C++ への準拠性の改善、動作変更、バグ修正 |
17.3 の新機能の部分的リスト:
- Arm64EC ツールチェーンは、実験段階としてマークされなくなり、運用環境で使う準備が整いました。
- Visual Studio ターミナルは、格納されている SSH 接続で SSH クライアントとして使用できるようになりました。 C++ for Linux Tools がインストールされた状態で、ターミナル ツール ウィンドウを開きます。 格納されている接続がターミナル ドロップダウンに入力されます。 接続を選択すると、Visual Studio 内に新しいターミナル ウィンドウが開き、リモート システム上の疑似ターミナルが表示されます。 制御文字、色、カーソル位置の認識はすべてサポートされています。
- Visual Studio で、UE プロジェクト用の Unreal Engine クラス テンプレートを追加できるようになりました。 この機能を試すには、Visual Studio インストーラー内の C++ によるゲーム開発ワークロードで [Unreal Engine 用の IDE サポート] が選択されていることを確認します。 UE プロジェクトで作業する場合は、プロジェクトまたはフォルダー/フィルターを右クリックして、[追加]>[UE クラス] の順に選択します。
- [定義へ移動] は、以前のシグネチャを記憶し、より適切な一致がない場合 (例: ペアの 1 つのシグネチャを手動で変更した後など)、それに応じてナビゲートするようになりました。 [すべてに移動] の応答性が向上しました。 以前は、入力を停止した後に結果が表示されていました。 新しいエクスペリエンスでは、ユーザーが入力するたびに結果が表示されます。
enum
型の補完を必要とするコンテキスト (enum
変数への割り当て、case ラベル、enum
型の戻り値など) では、オートコンプリート リストは、一致する列挙子および関連するコンストラクトのみにフィルター処理されるようになりました。- .NET Core を対象とする C++/CLI MSBuild プロジェクトの NuGet PackageReference サポートが追加されました。 この変更は、混合コードベースのブロックを解除して .NET Core 導入を可能にするために行われました。 このサポートは、他の C++ プロジェクト タイプや、.NET Framework を対象とする C++ プロジェクト タイプでは機能しません。 PackageReference のサポートを他の C++ シナリオに拡張する予定はありません。 チームは、MSBuild 以外のシナリオ用に、機能性を向上する vcpkg に関連する個別のエクスペリエンスに取り組んでいます。
- 埋め込み開発用のシリアル モニター ウィンドウを追加しました。これは、[デバッグ]>[Windows]>[シリアル モニター] で利用できます。
- 17.2 と比較して、C++ のインデックス作成が最大 66% 向上しました。
- Visual Studio に付属する CMake のバージョンをバージョン 3.23 にアップグレードしました。 使用可能な内容の詳細については、CMake 3.23 リリース ノートを参照してください。
- Visual Studio に付属する LLVM ツールのバージョンを v14 にアップグレードしました。 使用可能な内容の詳細については、LLVM および Clang のリリース ノートを参照してください。
- サイド バイ サイド Dev 16.11 C++ ツールセットをバージョン 14.29.30145.00 に更新しました。 最新バージョンの Dev 16.11 C++ ツールセットには、残っているすべての C++ 20 不具合報告の修正を含む、重要なバグ修正が含まれています。 Dev 16.11 の C++20 不具合報告を含むバグ修正の詳細については、Visual Studio 2019 バージョン 16.11.14 リリース ノートを参照してください。
- C++ モジュールのエディター内エクスペリエンスについて、さまざまな改善を行いました。 エクスペリエンスの品質向上に継続的に取り組んでいますが、17.3 でそれらを試してみることをお勧めします。 残っている問題は Developer Community を通じてご報告ください。
Visual Studio バージョン 17.2 での C++ の新機能
2022 年 5 月リリース
詳細情報: | 参照トピック |
---|---|
C++ 開発者向けの新着情報 | Visual Studio 2022 17.2 が利用可能に |
標準ライブラリ (STL) にマージされた C++20 の瑕疵レポート、C++23 機能、LWG の問題の解決、パフォーマンスの改善、動作の強化、バグ修正 | STL 変更ログ 17.2 |
Visual Studio 17.2 IDE の新機能 | Visual Studio 2022 バージョン 17.2 リリース ノート |
Visual Studio 2022 17.2 における C++ 言語への準拠性の改善 | Visual Studio 2022 における C++ への準拠性の改善、動作変更、バグ修正 |
17.2 の新機能の部分的リスト:
/std:c++latest
オプションで使用できる C++23 の機能であるthis
の推測に対するコンパイラ サポートを追加しました。- C++23 の機能である
this
の推測とif consteval
に対する IntelliSense のサポートを追加しました。 - インライン パラメーター名と型ヒントのサポートを追加しました。切り替えるには、Alt + F1 キーを押すか、Ctrl キーをダブルタップします。 この動作は、[ツール] > [オプション] > [テキスト エディター] > [C/C++] > [IntelliSense] でカスタマイズできます。
- CMake プロジェクトで C++20 モジュールの試験的サポートを追加しました。 このサポートは、現在、Visual Studio (MSBuild) ジェネレーターでのみ利用できます。
- 17.1 では、組み込み開発者向けの周辺機器レジスタと RTOS ビューを導入しました。 17.2 では、いっそう使いやすいように、これらのビューの機能を継続的に改善しています。
- RTOS ツール ウィンドウは、既定で非表示になりました。 これにより、RTOS を使用していないときに関係のないエラー メッセージがツール ウィンドウに表示されないようになります。
- ツール ウィンドウで RTOS オブジェクトをダブルクリックすると、オブジェクトのウォッチが追加されます。
- RTOS ツール ウィンドウでスタック ポインターの開始と終了の値を選ぶと、メモリ ウィンドウでそれが開きます。
- 呼び出し履歴ウィンドウにデバイス ターゲットのスレッド認識を追加しました。
- ユーザーは、周辺機器、レジスタ、またはフィールドの横にあるピン アイコンを選んで、周辺機器ビューの先頭にそれをピン留めできるようになりました。
- 残りの C++20 欠陥レポート (バックポートとも呼ばれます) の実装を追加しました。 C++20 のすべての機能を、
/std:c++20
オプションで使用できるようになりました。 実装されたバックポートについて詳しくは、Microsoft/STL GitHub リポジトリの C++20 不具合報告プロジェクトに関する記事と、ブログ記事「MSVC の STL コンプリート/std:c++20
」をご覧ください。 /std:c++latest
オプションで使用できる、さまざまな C++23 ライブラリ機能を追加しました。 新機能について詳しくは、STL リポジトリの変更ログに関する情報を参照してください。- インクルード グラフの深さに応じて、C++ の初期インデックス作成のパフォーマンスが最大 20% 向上しました。
Visual Studio バージョン 17.1 での C++ の新機能
2022 年 2 月リリース
詳細情報: | 参照トピック |
---|---|
C++ 開発者向けの新着情報 | Visual Studio 2022 17.1 が利用可能になりました |
標準ライブラリ (STL) にマージされた C++23 機能、LWG の問題の解決、パフォーマンスの改善、動作の強化、バグ修正 | STL 変更ログ 17.1 |
Visual Studio 17.1 IDE の新機能 | Visual Studio 2022 バージョン 17.1 リリース ノート |
Visual Studio 2022 17.1 における C++ 言語への準拠性の改善 | Visual Studio 2022 における C++ への準拠性の改善、動作変更、バグ修正 |
17.1 の新機能の部分的リスト:
- CMake プロジェクトを構成し、
CMakePresets.json
を使用してリモート macOS システムでビルドされるように、新しいプリセットの構成のテンプレートが追加されました。 また、リモート macOS システム上で CMake ターゲットを起動して、GDB または LLDB でサポートされている Visual Studio デバッガーをリモートでデバッグすることもできます。 - リモート macOS システム上のコア ダンプを、LLDB または GDB で Visual Studio からデバッグできるようになりました。
- Visual Studio に付属する
Clang
およびLLVM
の各バージョンが、v13 にアップグレードされます。 - Visual Studio の CMake 統合は、開いているワークスペースのルートで
CMakeLists.txt
が識別された場合にのみアクティブになります。CMakeLists.txt
が別のレベルのワークスペースで識別されている場合は、通知を受け取り、Visual Studio の CMake 統合をアクティブ化するように求められます。 - [デバッグ]>[Windows]>[埋め込みレジスタ] で使用可能な、マイクロコントローラーおよびリアルタイム オペレーティング システム (RTOS) オブジェクトの周辺機器レジスタを検査して操作できる新しいビュー
- RTOS プロジェクト用の新しいスレッド ビューが追加されました。[デバッグ]>[Windows]>[RTOS オブジェクト] で入手できます。 詳細については、「Visual Studio での埋め込みソフトウェア開発」を参照してください。
Visual Studio バージョン 17.0 での C++ の新機能
2021 年 11 月リリース
詳細情報: | 参照トピック |
---|---|
Visual Studio 17.0 IDE の新機能 | Visual Studio 2022 バージョン 17.0 リリース ノート |
標準ライブラリ (STL) にマージされた C++26 と C++23 の機能、C++20 の瑕疵レポート、LWG の問題の解決、パフォーマンスの改善、動作の強化、バグ修正 | STL 変更ログ 17.0 |
Visual Studio 2022 17.0 における C++ 言語への準拠性の改善 | Visual Studio 2017 での C++ 準拠の強化、動作変Visual Studio 2022 17.10更、バグ修正 |
Visual Studio 2022 バージョン 17.0 の一部の新機能の概要:
- Visual Studio IDE (
devenv.exe
) は、ネイティブの 64 ビット アプリケーションになりました。 - MSVC ツールセットでは既定で、SHA-256 ソース ハッシュがデバッグ レコードで使用されるようになりました。 以前は、ツールセットでは既定でソース ハッシュに MD5 が使用されていました。
- v143 のビルド ツールは、Visual Studio のインストーラーと スタンドアロンのビルド ツールから使用できるようになりました。
ネイティブ C++ のホット リロード
- C++ のホット リロードにより、実行中のアプリに対して、さまざまな種類のコードを編集し、ブレークポイントのようなものでアプリの実行を一時停止することなく適用できるようになります。
Visual Studio 2022 のデバッガーでアプリを起動するときに、[ホット リロード] ボタンを使うと、実行中のアプリケーションを変更することができます。 このエクスペリエンスは、ネイティブのエディット コンティニュを利用しています。 サポートされている編集の詳細については、「エディット コンティニュ (C++)」を参照してください。
- ホット リロードでは、CMake および OpenFolder プロジェクトがサポートされています。
WSL2 のサポート
- SSH 接続を確立することなく、WSL2 でネイティブにビルドとデバッグができるようになりました。 クロスプラットフォームの CMake プロジェクトと MSBuild ベースの Linux プロジェクトの両方がサポートされます。
CMake のサポートの向上
Visual Studio に付属している CMake のバージョンをバージョン 3.21 にアップグレードしました。 このバージョンで利用可能な機能の詳細については、CMake 3.21 のリリース ノートを参照してください。
CMake の概要ページが、
CMakePresets.json
をサポートするように更新されました。これで、CMake 3.21 と
CMakePresets.json
v3 を使用して、CMake プロジェクトを構成し、ビルドできるようになりました。Visual Studio で、
CMakePresets.json
のbuildPresets.targets
オプションがサポートされるようになりました。 このオプションを使用して、CMake プロジェクトでターゲットのサブセットをビルドできます。CMake プロジェクトの [プロジェクト] メニューが整理され、[キャッシュを削除して再構成] と [キャッシュの表示] のオプションが公開されました。
/scanDependencies
コンパイラ オプションが実装されました。これは P1689R5 で説明されている、CMake プロジェクトの C++20 モジュール依存関係を出力するためのものです。 これは、CMake を使用してモジュールベースのプロジェクトをビルドするためのサポートに向けた一歩であり、このサポートを今後のリリースで完成させるために取り組んでいます。
標準ライブラリの機能強化
ここでは、標準ライブラリ (STL) の機能強化について説明します。 新機能、変更、バグ修正、パフォーマンスの向上の総合的な一覧については、STL チームの「Changelog (変更履歴)」を参照してください。
- デバッグ ビジュアライザーを追加し、型
source_location
、bind_front()
、u8string
(およびその反復子)、default_sentinel_t
、unreachable_sentinel_t
、ranges::empty_view
、ranges::single_view
、ranges::iota_view
(およびその反復子とセンチネル)、ranges::ref_view
、thread
、thread::id
、jthread
、filesystem::path
の表示方法を強化しました。 <string>
のstoi()
ファミリの関数と、<locale>
のさまざまな関数 (collate
メンバー関数、has_facet()
、isalnum()
およびtolower()
ファミリなど) に[[nodiscard]]
を追加しました。- P0980R1 VS 2019 16.10 で
std::string
constexpr
を作成しました。 Clang でサポートされるようになりました。 - P1004R2 VS 2019 16.10 で
std::vector
constexpr
を作成しました。 Clang でサポートされるようになりました。
主な C++23 の機能
- P1048R1 C++ 標準ライブラリの新しい特徴である
is_scoped_enum
を追加しました。これにより、型がスコープを持つ列挙型かどうかが検出されます。 - P1132R7
out_ptr()
、inout_ptr()
- P1679R3
basic_string
とbasic_string_view
用のcontains()
- P1682R3 列挙型用の
to_underlying()
- P2162R2
std::variant
からの継承を許可します - P2166R1
nullptr
からのbasic_string
とbasic_string_view
の構築を禁止します。 この変更は、ソースの破壊的変更です。 これまで実行時に未定義の動作を示していたコードは、コンパイラ エラーで拒否されるようになりました。 - P2186R2 ガベージ コレクションのサポートを削除しました。 この変更により、
declare_reachable
、undeclare_reachable
、declare_no_pointers
、undeclare_no_pointers
、get_pointer_safety
が削除されます。 以前は、これらの関数は効果がありませんでした。
主なパフォーマンスの向上
<format>
により、basic_string
またはvector
に対してback_insert_iterator
に書き込まれているときが検出され、コンテナーのend()
でinsert()
がより高速に呼び出されるようになりました。vector<bool>
に対するstd::find()
およびstd::count()
のパフォーマンスが 19x と 26x (パーセントではなく倍) に向上しました。vector<bool>
に対するstd::count()
のパフォーマンスが向上しましたstd::byte
はreverse()
およびvariant::swap()
のunsigned char
と同じパフォーマンスになりました。
Clang と LLVM のサポート
Visual Studio に付属している LLVM ツールが LLVM 12 にアップグレードされました。 詳細については、LLVM のリリース ノートを参照してください。
Clang-cl のサポートが LLVM 12 に更新されました。
LLDB を使用して、Visual Studio からリモート システムで実行されているプロセスをデバッグできるようになりました。
非推奨の C++ AMP
- C++ AMP ヘッダーは非推奨になりました。 C++ プロジェクトに
<amp.h>
を含めると、ビルド エラーが生成されます。 エラーをサイレント状態にするには_SILENCE_AMP_DEPRECATION_WARNINGS
を定義します。 詳細については、AMP の非推奨化に関するリンクを参照してください。
IntelliSense の機能強化
- C++ IntelliSense で、インポートされるモジュールとヘッダー ユニットの型に対するナビゲーションと構文の強調表示を提供する際の動作を改善しました。 IntelliSense は、Microsoft が積極的に投資している分野です。 改善にご協力ください: [ヘルプ]>[フィードバックの送信] を使用して、Developer Community でフィードバックを共有してください。
- キャッシュされたヘッダーの使用とシンボル データベース アクセスを最適化することで、C++ IntelliSense のパフォーマンスを向上させました。これにより、コードにアクセスするための読み込み時間が短縮されます。
- C++ 用の IntelliSense コード リンターが既定でオンになるようになりました。これにより、すぐに入力候補が表示され、一般的なコードの欠陥の修正が提案されます。
- CMake プロジェクトに対する C++ IntelliSense が、表示名付きのプリセットを使用する場合に機能するようになりました。
C++ ワークロードの更新
- C++ モバイル開発ワークロードで NDK r21 LTS に更新しました。
- C++ ワークロードを使用するゲーム開発では、Visual Studio 2022 のサポートを備えた最新の Unreal Engine がインストールされるようになりました。
コード分析の機能強化
- コード分析では、
_Check_return_
または_Must_inspect_result_
を使用して注釈が付けられた関数の戻り値が確認する必要があることが強制されるようになりました。 - コード分析ツールでの Null ポインター逆参照の検出を改善しました。
gsl::not_null
のサポートをコード分析に追加しました。/fsanitize=fuzzer
コンパイラ オプションでの Libfuzzer のサポート。
以前のバージョンのリリース ノート
以下の C++ の以前のバージョンのリリース ノートも参照できます。
- Visual Studio 2019 での C++ の新機能については、Visual Studio 2019 での C++ の新機能に関するページを参照してください。
- Visual Studio 2017 での C++ の新機能については、「Visual Studio 2017 での C++ の新機能」を参照してください。
- 以前のバージョンの新機能については、「 Visual C++ What's new 2003 to 2015」を参照してください。
既知の問題
C++ の IntelliSense
Visual Studio 2022 の C++ に関する他の未解決の問題と使用できる回避策の詳細については、C++ Developer Community の問題の一覧を参照してください。
フィードバックと提案
お気軽にお問い合わせください。 問題の報告または機能の提案は、インストーラーまたは Visual Studio IDE の右上隅にある [フィードバックの送信] アイコンを使用するか、 [ヘルプ]>[フィードバックの送信] から行うことができます。 Visual Studio Developer Community を使用して問題を追跡でき、コメントを追加したり、解決策を見つけたりできます。 ライブ チャット サポートを介して、無料のインストールのヘルプを取得することもできます。
ブログ
Microsoft 開発者ブログ サイトで提供されている洞察とお勧めを利用して、すべての新しいリリースの最新情報を入手してください。 ブログには、さまざまな機能に関する詳細な投稿が含まれています。 特に興味深いのは、C++ チームのブログと Visual Studio のブログです。