Visual Studio 2022 では、Microsoft C++ コンパイラおよびツールに対する多くの更新と修正が導入されています。 また、Visual Studio IDE はパフォーマンスと生産性が大幅に向上し、64 ビット アプリケーションとしてネイティブに実行されるようになりました。
- Visual Studio 全体の新機能の詳細については、「Visual Studio 2022 の新機能」を参照してください。
- バージョンのビルド日の詳細については、「Visual Studio 2022 リリース履歴」を参照してください。
Visual Studio バージョン 17.14 の C++ の新機能
リリース日: 2025 年 5 月
以下の詳細については、 | 参照先 |
---|---|
C++ 開発者向けの新着情報 | Visual Studio 2022 17.14 の C++ 開発者向けの新機能 |
標準ライブラリ (STL) では、C++26 と C++23 の機能、言語ワーキング グループ (LWG) の問題の解決、パフォーマンスの向上、動作の強化、修正されたバグがマージされました | STL Changelog 17.14 |
IDE の新機能 | Visual Studio 2022 バージョン 17.14 リリース ノート |
C++ 言語の更新 | Visual Studio 2022 17.14 の MSVC での C++ 言語の更新 |
C++ 言語の準拠性の改善 | Visual Studio 2022 17.14 での C++ 準拠の機能強化、動作の変更、バグ修正 |
新機能の一部を簡単に紹介します。
C++ 動的デバッグを使用すると、パフォーマンスに影響を与えることなく、最適化されたコードをデバッグできます。 詳細については、「 C++ 動的デバッグ」を参照してください。
実装された C++23 機能 (
/std:c++latest
または/std:c++23preview
が必要):static operator()
static operator[]
-
if consteval
。 ステートメントがコンパイル時または実行時に実行されるかどうかに応じて、異なるコードを実行できます。
GitHub Copilot を使用してドキュメント コメントを自動的に生成します。 詳細については、「 Visual Studio での自動ドキュメント コメント生成の概要」を参照してください。
Visual Studio のモデル ピッカーを使用して、GitHub Copilot の AI モデルを選択します。 詳細については、「 Copilot Chat の AI モデルの変更」を参照してください。 このスクリーンショットは、GitHub Copilot チャット ウィンドウの下部にあるモデル ピッカーを示しています。
モデル ピッカーのドロップダウンが開いています。 オプションには、GPT-4o、o3-mini、Claude 3.7 Sonnet Thinking などがあります。
Unreal Engine の統合の機能強化:
- Visual Studio C++ デバッガーで Unreal Engine Blueprints がサポートされるようになりました。
- ファイル、モジュール、プラグインをビルドするためのコマンドは、Visual Studio でネイティブに使用できます。
新しいコンパイラ フラグ /forceInterlockedFunctions は、実行時の CPU 機能に基づいて、Armv8.0 の読み込み、排他的命令の格納、または Armv8.1 Large System Extension (LSE) アトミック命令の間で動的に選択します。
Visual Studio での CMake モジュールに、IntelliSense ベースのオートコンプリートとクイック情報のサポートが追加されました。 使用可能なすべての CMake モジュールを表示でき、参照されている CMake モジュールの上にマウス ポインターを置くと、IntelliSense は選択したモジュールに関する詳細情報を提供します。
スクリーンショットは、C Make Lists .txt ファイルの編集です。 カーソルがインクルード (CMakePrintHelpers) にあります。 Intellisense の説明: プロパティと変数を印刷するための便利な関数。デバッグに役立ちます。
CMakeLists.txt
またはその他の CMake スクリプト ファイルに CMake モジュール名の入力を開始すると、IntelliSense には、次から選択できるモジュールの一覧が表示されます。スクリーンショットは、C Make Lists .txt ファイルの編集です。 カーソルは「インクルード」にあります(C Make) Intellisense ドロップダウンには、C Make Add Fortran サブディレクトリ、C Make Dependent Option などのエントリが含まれています。
ガイドライン サポート ライブラリ (GSL) 4.2.0: このリリースには、
gsl::span
のパフォーマンスの向上、新機能、C++ 標準との整合性の向上が含まれています。 詳細については、「 Announcing Guidelines Support Library v4.2.0」を参照してください。
Visual Studio バージョン 17.13 の C++ の新機能
リリース日: 2025 年 2 月
以下の詳細については、 | 参照先 |
---|---|
C++ 開発者向けの新着情報 | Visual Studio 2022 17.13 の C++ 開発者向けの新機能 |
標準ライブラリ (STL) C++26 および C++23 の機能、言語ワーキング グループ (LWG) の問題の解決、パフォーマンスの向上、動作の強化、修正されたバグ | STL 変更ログ 17.13 |
IDE の新機能 | Visual Studio 2022 バージョン 17.13 リリース ノート |
C++ 言語の更新 | Visual Studio 2022 17.13 での MSVC コンパイラの更新 |
C++ 言語の準拠性の改善 | Visual Studio 2022 17.13 での C++ 準拠の機能強化、動作の変更、バグ修正 |
いくつかの新機能の概要:
C++ 言語の機能強化
C++ 言語標準を
/std:c++23preview
に設定して、C++23 プレビュー機能を試してみてください。 この設定により、最新の C++23 機能とバグ修正が有効になります。 詳細については、/std (標準言語バージョンの指定)を参照してください。C++23 の
size_t
リテラル サフィックスのサポート。これは、切り捨てや符号付き比較の不一致を回避するのに役立ちます。特にループを記述する場合です。 次に例を示します。// Infinite loop if v.size > max unsigned int for (auto i = 0u; i < v.size(); ++i) { ... } // Fixed because of uz literal for (auto i = 0uz; i < v.size(); ++i) { ... }
Intel Advanced Vector Extensions 10 バージョン 1 のサポート。
/arch:AVX10.1
の詳細については、/arch (x64)を参照してください。
標準ライブラリの機能強化
couroutine の標準ライブラリのサポート。 この P2502R2の例では、
fib
関数はコルーチンです。co_yield
ステートメントが実行されると、fib
が中断され、値が呼び出し元に返されます。fib
コルーチンを後で再開して、手動の状態処理を必要とせずに、より多くの値を生成できます。std::generator<int> fib() { auto a = 0, b = 1; while (true) { co_yield std::exchange(a, std::exchange(b, a + b)); } } int answer_to_the_universe() { auto rng = fib() | std::views::drop(6) | std::views::take(3); return std::ranges::fold_left(std::move(range), 0, std::plus{}); }
system_clock
、high_resolution_clock
、およびchrono_literals
を、一般的に含まれる内部ヘッダーから<chrono>
に移動しました。system_clock
などの型や1729ms
などのユーザー定義リテラルが認識されないコンパイラ エラーが表示される場合は、<chrono>
を含めます。文字列、
bitset
、basic_string::find_last_of()
、remove()
、およびranges::remove
およびminmax_element()
アルゴリズム ファミリからのminmax()
コンストラクターのベクター化された実装が改善されました。次のベクター化された実装が追加されました。
- 1 バイト要素と 2 バイト要素の
find_end()
とranges::find_end
。 - substring の
basic_string::find()
とbasic_string::rfind()
。 - 1 文字に対する
basic_string::rfind()
。
- 1 バイト要素と 2 バイト要素の
マージされた C++23 ディフェクト レポート:
GitHub コパイロット
GitHub Copilot Free が利用可能になりました。 1 か月あたり 2,000 件のコード入力候補と 50 件のチャット要求を無償で取得できます。
GitHub Copilot のコード補完では、コードを記述するときに自動補完の候補がインラインで提供されます。 C++ 開発者のエクスペリエンスを強化するために、GitHub Copilot にはコンテキストとして他の関連ファイルが含まれています。 これにより、より関連性の高い正確な提案を提供しながら、エラーが減少します。
Git の [変更] ウィンドウから GitHub Copilot からコード レビューを要求できるようになりました。
[Git の変更] ウィンドウが開き、GitHub Copilot の [レビュー] ボタンが強調表示されています。
GitHub Copilot は潜在的な問題を探し、それらに対するコメントを作成します。
GitHub Copilot は、行内の if (is_enabled_) new_site.disable() に問題を見つけました。 それは間違っている可能性があり、ブレークポイントが有効な場合は新しいサイトを有効にすることが意図のように思えるため、おそらく( is_enabled_) new_site.enable() であるべき可能性が高いと書かれています。
この機能を使用するには、次の機能がオンになっていることを確認します。
- [ツール]>[オプション]>[プレビュー機能]>[プル リクエスト コメント]
- [ツール]>[オプション]>[GitHub]>[Copilot]>[ソース管理の統合]>[Git プレビュー機能の有効化]。
GitHub Copilot Edits は、プロジェクト内の複数のファイル間で変更を加えることができる新機能です。 新しい編集セッションを開始するには、GitHub Copilot チャット ウィンドウの上部にある [新しい編集セッションの作成] をクリックします。
行う変更について説明し、Copilot が関連する編集を提案します。 編集内容を 1 つずつプレビューし、必要なものを受け入れるか、修正することができます。
GitHub Copilot には、加えられた変更の概要 (1 など) が表示されます。 include/libsdb/breakpoint.hpp" と 2 に新しいサブクラス range_breakpointを作成します。 src/breakpoint.cpp に range_breakpoint クラスを実装します。 変更を受け入れるオプションが表示されます。
詳細については、「GitHub Copilot Editsを使用して複数のファイルをより効率的に反復処理する」を参照してください。
CMake
- CMake プリセット v9 がサポートされるようになりました。 プリセットのインクルードフィールドにおける新たなマクロ展開。 詳細については、公式の CMake ドキュメント マクロ展開 を参照してください。
Visual Studio バージョン 17.12 の C++ の新機能
リリース日: 2024 年 11 月
以下の詳細については、 | 参照先 |
---|---|
C++ 開発者向けの新着情報 | Visual Studio 2022 17.12 の C++ 開発者向けの新機能 |
標準ライブラリ (STL) では、C++26 と C++23 の機能、言語ワーキング グループ (LWG) の問題の解決、パフォーマンスの向上、動作の強化、修正されたバグがマージされました | STL Changelog 17.12 |
Visual Studio 17.12 IDE の新機能 | Visual Studio 2022 バージョン 17.12 リリース ノート |
Visual Studio 2022 17.12 での C++ 言語準拠の機能強化 | Visual Studio 2022 17.12 での C++ 準拠の機能強化、動作の変更、バグ修正 |
新機能の一部を簡単に紹介します。
-
標準ライブラリの機能強化
- C++23 書式設定範囲 (P2286R8) の実装が完了しました。 コンテナー アダプターの
stack
、queue
、priority_queue
のフォーマッタを追加しました。 -
<mdspan>
もサポートする多次元添字演算子が追加されました。 (例:print("m[{}, {}]: '{}'; ", i, j, m[i, j])
)。
- C++23 書式設定範囲 (P2286R8) の実装が完了しました。 コンテナー アダプターの
-
C++ でのゲーム開発
- Unreal Engine プロジェクトをラップする Visual Studio ソリューション ファイルを生成しなくても、Visual Studio で Unreal Engine プロジェクトを直接開きます。 詳細については、「 Work with Unreal Engine projects in Visual Studio」を参照してください。
- ツール バーから直接デバッグするときに渡すコマンド ライン引数を指定できます。 詳細については、「 Unreal Engine プロジェクトのコマンド ライン引数を設定するを参照してください。
-
Build Insights
- 選択したファイルに対して Build Insights を実行できます。
ソリューション エクスプローラーで目的のファイルを選択し、右クリックして、[選択したファイル Build Insights を実行する] を選択します:
- プロジェクトごとに Build Insights の結果をフィルター処理できます。 フィルター列ヘッダーのフィルター ボタンをクリックし、結果を表示するプロジェクトを選択します。
- [Build Insights] ウィンドウの疑問符アイコンをクリックすると、[Build Insights] ウィンドウのタブの簡単な説明と、詳細な説明に関するドキュメントへのリンクが表示されます。
- 選択したファイルに対して Build Insights を実行できます。
ソリューション エクスプローラーで目的のファイルを選択し、右クリックして、[選択したファイル Build Insights を実行する] を選択します:
-
GitHub コパイロット
- 変数の値の横にある [ Ask Copilot をクリックすると、現在の状態の原因に関する AI 主導の分析情報を取得できます。 たとえば、次のプログラムには、ループ条件に off-by-one エラーが含まれています。
この問題の原因となったコードは、(auto it = h.animals_.begin()、<= h.animals_.end();it++) です。
it
変数の [Copilot に尋ねる] アイコンをクリックすると、それが<NULL>
理由がわかります。このエラーは、int calculate_number_of_cats(const house& h) として定義された関数内にあります。 GitHub Copilot メッセージには、「式の値は NULL です。これは、反復子がベクター animals_内の有効な要素を指していないことを意味します。 プログラムのコンテキストでは、ハウス オブジェクト内のanimals_ ベクターを反復処理して、cat オブジェクトの数をカウントすることが想定されています。 それが null である理由。 ローカル変数とコール スタック コンテキストに基づいて、ハウス オブジェクト h は空の animals_ ベクトル (サイズ = 0) を持ちます。 <= h.animals_.end() のループ条件が正しくありません。 それは != h.animals_.end()" である必要があります。
- Visual Studio Error List のエラーに関する Ask Copilot をクリックするとエラーと修正候補に関するヘルプが表示されます。 次に例を示します。
[Copilot に問い合わせ] をクリックすると、エラーが表示されます。削除された関数を参照しようとしているunique_ptrエラーの横にある [Copilot に尋ねる] アイコンが強調表示されています。
「範囲ベースの for ループが std::unique_ptr オブジェクトをコピーしようとしていたため、エラーが発生します。std::unique_ptr はコピーできないため、許可されていません。 これを修正するために、std::unique_ptrオブジェクトをコピーしないように参照を使用するようにループを変更しました。 これにより、ループは std::unique_ptr オブジェクトへの参照を反復処理します。これは許可されています。
-
デバッグ
-
mutex
、recursive_mutex
、およびmove_iterator
用の新しいデバッグ ビジュアライザー。 - デバッガーは、戻り値をインラインで表示できるようになりました。
-
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::range_formatter
と、std::pair
およびstd::tuple
用のフォーマッタが含まれるようになりました。 - 引数なしの
std::println()
のサポートを追加しました。 これにより、 P3142R0で提案された空白行が出力されます。 - 8 ビットおよび 16 ビット要素、
replace_copy()
、replace_copy_if()
、ranges::replace_copy
、ranges::replace_copy_if
、find_first_of()
、ranges::find_first_of
、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 スクリプトと
GitHub コパイロット
- コード エディターでシンボルにカーソルを合わせると、[クイック ヒント] ダイアログの [Copilot 詳細 ボタンをクリックして、特定のシンボルの詳細を確認します。
クイック ヒント ウィンドウは、関数の上に表示されます。 [詳細を教えてください] リンクが強調表示されています。
- GitHub Copilot では、識別子の使用方法とコードのスタイルに基づいて、識別子 (変数、メソッド、またはクラス) の名前付けの提案を生成できます。
[名前の変更] ダイアログには、[新しい名前] フィールドがあり、ドロップダウン リストにtext_color、font_color、display_color、console_color、menu_text_colorが表示されます。
アクティブな GitHub Copilot サブスクリプションが必要です。 名前を変更する変数を右クリックし、 Rename (
Ctrl+R
、Ctrl+R
) を選択します。 GitHub Copilot のきらめきアイコンを選択して、名前付けの提案を生成します。デバッグ
- C++ の条件付きブレークポイントの方が高速です。
診断の機能強化
- テンプレート引数に複数の
std::get<T>
インスタンスがあるstd::tuple
で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 接続マネージャーの操作性の改善」を参照してください。
- プルリクエストコメント: GitHub と Azure DevOps のコメントが作業ファイル内で直接表示されるようになりました。 利用を開始するには、[オプション]>> で機能フラグである pull request コメントを有効にして pull request ブランチをチェックアウトします。
- AI 生成コンテンツ: GitHub Copilot で pull request の説明を下書きできるようになりました。 アクティブな GitHub Copilot サブスクリプションが必要です。 これを試すには、[pull request の作成] ウィンドウ内の [AI によって生成された pull request の説明の追加] というきらめくペンのアイコンをクリックします。
-
画像プレビュー: 画像パスの上にホバーすることで、サイズの詳細と共にプレビューが表示されます。 サイズは幅と高さが500pxに制限されています。
マウスは 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 の上には **リファレンス**リンクがあり、(この場合は 1 つの)この #include ファイルへの参照が多くあります。 ビルド時間も表示されます (この場合は 1/2 秒未満)。
- クラス、構造体、共用体用のメモリがどのように配置されているかを示すメモリ レイアウトの視覚化。 型の上にホバーして、[クイック ヒント] 内の [メモリ レイアウト] リンクを選択し、選択された型のメモリ レイアウトを表示する専用ウィンドウを開きます。 このウィンドウ内の個々のデータ型の上にホバーすることで、その型内のサイズとオフセットに関する詳細情報が表示されます。
メモリ レイアウト ウィンドウには、Snake クラスの内容が表示されます。 ヘッドとボディの位置やスコアなどに対する Point クラスなど、クラスのさまざまなフィールドのメモリ オフセットが表示されます。
- 独自のカスタム CMake 実行可能ファイルを指定できるようになりました。 この機能は、Visual Studio に付属していない特定のバージョンの CMake を使用したい場合に役に立ちます。
[ツール]>[オプション] に移動して [CMake]>[全般] を選択します。
[カスタムの CMake 実行可能ファイルを有効にする] を選択し、CMake 実行可能ファイルのディレクトリ パスを指定します。
"カスタムの CMake 実行可能ファイルを有効にする" オプションと "CMake 実行可能ファイルのディレクトリ" フィールドが強調表示された [CMake オプション] ダイアログ。
- Unreal Engine プロジェクトの IntelliSense の改善。
- C++23 のサポートの改善:
std::format
とstd::span
formattable
、range_format
、format_kind
、set_debug_format()
(P0009R18 による<mdspan>
の一部)、および C++23 Standard に適用されたそれ以降の表現の変更。 また、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>
) の初期試験的サポートが追加されました。 この実験的な機能は、/experimental:c11atomics
モード以降で/std:c11
オプションを使って有効にできます。ノイズを低減するために、ライフタイム チェッカーに新しい一連の実験的な高信頼度チェックが追加されました。
新しいプレビュー機能であるリモート ファイル エクスプローラーを使うと、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 の新機能の部分的リスト:
コンパイラ エラー メッセージが向上し、特に概念に関して、より正確で有用な情報が提供されます。
/experimental:log<directory>
を指定したディレクトリに出力する実験的な MSVC オプション、 を追加しました。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
pmr
用にstd::stacktrace
の別名を追加する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 の新機能の部分的リスト:
-
this
オプションで使用できる C++23 の機能である に対するコンパイラ サポートを追加しました。 - 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 リポジトリの VS 2022 Changelog と、MSVC の STL Completes/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 プロジェクトを構成し、 を使用してリモート macOS システムでビルドされるように、新しい
CMakePresets.json
のテンプレートが追加されました。 また、リモート 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++23 と C++26 の機能、C++20 の欠陥レポート、言語ワーキング グループ (LWG) の問題の解決、パフォーマンスの向上、動作の強化、修正されたバグをマージしました | STL 変更ログ 17.0 |
Visual Studio 2022 17.0 における C++ 言語への準拠性の改善 | Visual Studio 2022 17.10 における C++ への準拠性の改善、動作変更、バグ修正 |
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 で、
buildPresets.targets
のCMakePresets.json
オプションがサポートされるようになりました。 このオプションを使用して、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
の表示方法を強化しました。 -
[[nodiscard]]
のstoi()
ファミリの関数と、<string>
のさまざまな関数 (<locale>
メンバー関数、collate
、has_facet()
およびisalnum()
ファミリなど) にtolower()
を追加しました。 -
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
contains()
basic_string
とbasic_string_view
用 -
P1682R3
to_underlying()
列挙型用 -
P2162R2
std::variant
からの継承を許可します -
P2166R1
basic_string
からのbasic_string_view
とnullptr
の構築を禁止します。 この変更は、ソースの破壊的変更です。 これまで実行時に未定義の動作を示していたコードは、コンパイラ エラーで拒否されるようになりました。 -
P2186R2 ガベージ コレクションのサポートを削除しました。 この変更により、
declare_reachable
、undeclare_reachable
、declare_no_pointers
、undeclare_no_pointers
、get_pointer_safety
が削除されます。 以前は、これらの関数は効果がありませんでした。
主なパフォーマンスの向上
-
<format>
は、back_insert_iterator
またはbasic_string
にvector
のために書き込んでいるときにそれを検出し、コンテナーのinsert()
でend()
がより高速に呼び出されるようになりました。 -
std::find()
に対するstd::count()
およびvector<bool>
のパフォーマンスが 19x と 26x (パーセントではなく倍) に向上しました。 -
std::count()
に対するvector<bool>
のパフォーマンスが向上しました -
std::byte
はunsigned char
およびreverse()
のvariant::swap()
と同じパフォーマンスになりました。
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 のブログです。