Visual Studio 2022 の C++ の新機能
Visual Studio 2022 では、Microsoft C++ コンパイラとツールに多くの更新プログラムと修正プログラムが提供されます。 また、Visual Studio IDE はパフォーマンスと生産性が大幅に向上し、64 ビット アプリケーションとしてネイティブに実行されるようになりました。
- Visual Studio 全体の新機能の詳細については、「Visual Studio 2022 の新機能」を参照してください。
- 2023 年の Visual Studio、VS Code、vcpkg での C++ の機能強化の概要については、「C++ の機能強化の 1 年間」を参照してください 。
- C++ ドキュメントの新着記事については、Microsoft C++ ドキュメントの新着記事に関するページを参照してください。
Visual Studio バージョン 17.9 の C++ の新機能
新機能の一部を簡単に示します。
#include
診断。ディレクティブの詳細な分析が#include
提供されます。 この機能を#include
アクティブにするには、#include ディレクティブを右クリックして[#include ディレクティブ>をオンにする]診断を選択します。 それぞれの#include
上には、コードがそのファイルを参照する回数があります#include
。 参照リンクをクリックして、コードがそのヘッダー ファイルの何かを使用する場所に移動します。 ディレクティブのビルド時間を#include
表示するには、ソリューション> ビルドでビルド実行ビルド インサイトに移動してビルド>インサイトを実行します。#include の上には**reference** リンクと、この # インクルード ファイルへの参照の数があります (この場合は 1)。 ビルド時間も表示されます (この場合は 1/2 秒未満)。
- メモリ レイアウトの視覚化。クラス、構造体、共用体のメモリの配置方法を示します。 種類にカーソルを合わせ、[クイック ヒント] の [メモリ レイアウト ] リンクを 選択すると、選択した種類のメモリ レイアウトを表示する専用ウィンドウが開 きます。 このウィンドウ内の個々のデータ型にカーソルを合わせると、型内のサイズとオフセットに関する詳細情報が表示されます。
メモリ レイアウト ウィンドウには、スネーク クラスの内容が表示されます。 頭と体の位置の Point クラス、スコアなど、クラスのさまざまなフィールドのメモリ オフセットが表示されます。
- 独自のカスタム CMake 実行可能ファイルを指定できるようになりました。 この機能は、Visual Studio に付属していない特定のバージョンの CMake を使用する場合に便利です。 [ツール>オプション] に移動し、[CMake>全般] を選択します。 [カスタム CMake 実行可能ファイルを有効にする] を選択し、CMake 実行可能ファイルのディレクトリ パスを指定します。
[カスタム CMake 実行可能ファイルを有効にする] オプションと [CMake 実行可能ディレクトリ] フィールドが強調表示された [CMake オプション] ダイアログ。
- Unreal Engine プロジェクトの IntelliSense が改善されました。
- C++23 のサポート
std::format
が強化されました。またrange_format
set_debug_format()
std::span
formattable
format_kind
、C++23 標準に適用されたP0009R18ごとのP2286R8書式設定範囲<mdspan>
とその後の文言の変更の一部として、および 、、。。 また、format()
P2510R3ごとにポインターを書式設定することもできます。
C++ バックエンドの更新の概要については、Visual Studio 2022 バージョン 17.3 以降の MSVC バックエンドの更新に関するページを参照してください。
Visual Studio 17.9 IDE の新機能の概要については、Visual Studio 2022 バージョン 17.9 リリース ノートを参照してください。
Visual Studio バージョン 17.8 での C++ の新機能
新機能の一部を簡単に示します。
- [出力] ウィンドウの 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 プロジェクトで動作するようになりました。 コンパイルにかかった時間や ForceInlines の数など、関数のコンパイルに関する追加情報を確認できるようになりました。
- Linux でリモート単体テストがサポートされ、ローカル テストと同様に、Visual Studio のテスト エクスプローラーから遠隔にある Linux マシンで CTest テストと GTest テストを実行できるようになりました。
Visual Studio 17.8 の C++ の新機能の包括的な概要については、「Visual Studio 2022 17.8 の C++ 開発者向け新機能」を参照してください。
Visual Studio 17.8 IDE の新機能に関する概要については、「Visual Studio 2022 バージョン 17.8 リリース ノート」を参照してください。
Visual Studio バージョン 17.7 での C++ の新機能
Visual Studio 17.7 の C++ の新機能の概要については、「Visual Studio 2022 17.7 の C++ 開発者向け新機能」を参照してください。
新機能の一部を簡単に示します。
- デバッグ セッションの高速化とプロジェクトの読み込み時間の短縮
- マクロ拡張のステップバイステップの視覚化
- Linux 用 Windows サブシステム (WSL) のワンクリック ダウンロード
- Doxygen のコメントのサポート強化
- ゲーム開発用の C++ Build Insights
/std:clatest
が C コンパイラ用に追加されました。- IntelliSense の高速化や構文の色付け、すべての Unreal Engine Blueprint 参照の検索機能といった、Unreal Engine プロジェクトの機能強化。
ゲーム開発に固有の C++ の新機能の概要については、「C++ のゲーム開発向けに強化された Visual Studio 2022」を参照してください
Visual Studio 17.7 IDE の新機能の概要については、「Visual Studio 2022 バージョン 17.7 リリース ノート」を参照してください。
Visual Studio バージョン 17.6 での C++ の新機能
Visual Studio 17.6 の C++ の新機能の概要については、「Visual Studio 2022 17.6 の C++ 開発者向け新機能」を参照してください。
一部の新機能は、CMake スクリプト デバッグ、高レベル シェーディング言語 (HLSL) の組み込みサポート、Unreal エンジン ログ ビューアー、C++/CLI プロジェクトでの C++20 の初期サポート、VCPKG が既定で追加され、範囲の一部の C++23 標準ライブラリ機能です。 標準ライブラリに追加された新機能の完全な一覧については、STL の変更ログに関する記事を参照してください。
Visual Studio 17.6 IDE の新機能の概要については、「Visual Studio 2022 バージョン 17.6 リリース ノート」を参照してください。
Visual Studio バージョン 17.5 での C++ の新機能
Visual Studio バージョン 17.5 の C++ の新機能の概要については、「Visual Studio 2022 17.5 の C++ 開発者向け新機能」を参照してください。 Visual Studio IDE バージョン 17.5 での新機能とバグ修正プログラムの概要については、「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++ の新機能
Visual Studio バージョン 17.4 での新機能とバグ修正プログラムの概要については、「Visual Studio 2022 バージョン 17.4 リリース ノート」および「Visual Studio 2022 17.4 の C++ 開発者向け新機能」を参照してください。
コンパイラ エラー メッセージが向上し、特に概念に関して、より正確で有用な情報が提供されます。
構造化された 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++ の新機能
Visual Studio バージョン 17.3 での新機能とバグ修正プログラムの概要については、「Visual Studio 2022 バージョン 17.3 リリース ノート」および「C++ の機能強化」を参照してください。
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++ の新機能
Visual Studio バージョン 17.2 での新機能とバグ修正の概要については、「Visual Studio 2022 バージョン 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++ の新機能
Visual Studio バージョン 17.1 での新機能とバグ修正の概要については、「Visual Studio 2022 バージョン 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++ の新機能
Visual Studio での新機能とバグ修正の概要については、「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++ 2003 から 2015 の新機能」を参照してください。
既知の問題
C++ の IntelliSense
Visual Studio 2022 の C++ に関する他の未解決の問題と使用できる回避策の詳細については、C++ Developer Community の問題の一覧を参照してください。
フィードバックと提案
お気軽にお問い合わせください。 問題の報告または機能の提案は、インストーラーまたは Visual Studio IDE の右上隅にある [フィードバックの送信] アイコンを使用するか、 [ヘルプ]>[フィードバックの送信] から行うことができます。 Visual Studio Developer Community を使用して問題を追跡でき、コメントを追加したり、解決策を見つけたりできます。 ライブ チャット サポートを介して、無料のインストールのヘルプを取得することもできます。
ブログ
Microsoft 開発者ブログ サイトで提供されている洞察とお勧めを利用して、すべての新しいリリースの最新情報を入手してください。 ブログには、さまざまな機能に関する詳細な投稿が含まれています。 特に興味深いのは、C++ チームのブログと Visual Studio のブログです。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示