Visual Studio 2022 中 C++ 的新功能

Visual Studio 2022 為 Microsoft C++ 環境帶來許多更新和修正。 我們已新增功能和修正編譯器和工具中的許多 Bug 和問題。 Visual Studio IDE 也提供效能和生產力的重大改善,現在以 64 位應用程式的形式原生執行。 如需所有 Visual Studio 新功能的詳細資訊,請流覽 Visual Studio 2022 的新功能。 如需 C++ 檔中新功能的相關資訊,請參閱 Microsoft C++ 檔:新功能

Visual Studio 17.3 版中 C++ 的新功能

如需 Visual Studio 17.3 版中新功能和 Bug 修正的摘要,請參閱 Visual Studio 2022 17.3 版版本資訊

  • Arm64EC 工具鏈不再標示為實驗性,且已準備好供生產環境使用。

  • Visual Studio 終端機現在可以作為具有預存 SSH 連線的 SSH 用戶端。 安裝適用于 Linux 工具的 C++ 後,開啟 [終端機] 工具視窗。 [終端機] 下拉式清單會填入預存連線。 當您選取連線時,新的 [終端機] 視窗會在 Visual Studio 內開啟,以顯示遠端系統上的虛擬終端機。 支援控制字元、色彩和游標位置感知。

  • Visual Studio 現在可以為您的 UE 專案新增 Unreal Engine 類別範本。 若要嘗試這項功能,請確定在 Visual Studio 安裝程式 中使用C++ 進行的遊戲開發工作負載中已選取Unreal Engine 的 IDE 支援。 當您處理 UE 專案時,以滑鼠右鍵按一下專案或資料夾/篩選,然後選取 [新增>UE 類別]。

  • 移至定義 現在會記住先前的簽章,並在較佳的相符專案 (無法使用時流覽,例如,當您手動變更其中一組的簽章) 之後。 我們已改善 [移至全部] 的回應能力。 先前,結果會出現在您停止輸入之後。 在新體驗中,結果會顯示為您輸入。

  • 例如,在需要 enum 類型完成的內容中, enum (變數、案例標籤、傳回 enum 型別等等) ,自動完成清單現在只會篩選成相符的列舉值和相關建構。

  • 已新增以 .NET Core 為目標的 C++/CLI MSBuild 專案的 NuGet PackageReference 支援。 這項變更是為了解除封鎖混合程式碼基底,使其無法採用 .NET Core。 此支援不適用於其他 C++ 專案類型或任何以.NET Framework為目標的 C++ 專案類型。 沒有計劃將 PackageReference 支援延伸至其他 C++ 案例。 小組正在處理涉及 vcpkg 的不同體驗,這適用于非 MSBuild 案例,並新增更大的功能。

  • 已新增用於內嵌開發的序列監視器視窗,可透過偵錯>Windows>序列監視器取得。

  • 相較于 17.2,已改善 C++ 索引編制 66%。

  • 將 Visual Studio 隨附的 CMake 版本更新為 3.23 版。 如需可用專案的詳細資訊,請參閱 CMake 3.23 版本資訊

  • 將 Visual Studio 隨附的 LLVM 工具版本升級為 v14。 如需可用專案的詳細資訊,請參閱 LLVMClang 版本資訊。

  • 已將並存 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 中試用。 透過開發人員社群回報剩餘的問題。

Visual Studio 17.2 版中 C++ 的新功能

如需 Visual Studio 17.2 版中新功能和 Bug 修正的摘要,請參閱 Visual Studio 2022 17.1 版版本資訊

  • 已新增 C++23 功能的編譯 this程式支援,可在 選項下 /std:c++latest 取得。

  • 已新增 C++23 功能的 IntelliSense 支援thisif consteval

  • 已新增內嵌參數名稱和類型提示支援,按下 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 Completes /std:c++20部落格文章。

  • 我們已新增各種 C++23 程式庫功能,可在 選項下 /std:c++latest 取得。 如需新功能的詳細資訊,請參閱 STL 存放庫變更記錄

  • 根據包含圖形的深度,改善初始 C++ 索引編制的效能上限為 20%。

Visual Studio 17.1 版中的 C++ 新功能

如需 Visual Studio 版本 7. 中新功能和 Bug 修正的摘要,請參閱 Visual Studio 2022 17.1 版版本資訊

  • 已新增設定 預設 範本,以使用 CMakePresets.json 在遠端 macOS 系統上設定和建置 CMake 專案。 您也可以在遠端 macOS 系統上啟動 CMake 目標,然後在 GDB 或 LLDB 支援的 Visual Studio 偵錯工具中從遠端偵錯。

  • 您現在可以使用 LLDB 或 GDB 從 Visual Studio 對遠端 macOS 系統上的核心傾印進行偵錯。

  • Visual Studio 隨附的版本 ClangLLVM 已升級為 v13。

  • 只有在識別在開啟工作區根目錄的 時 CMakeLists.txt ,Visual Studio 的 CMake 整合才會作用中。 如果在工作區的另一個層級識別 , CMakeLists.txt 系統會提示您啟用 Visual Studio 的 CMake 與通知整合。

  • 已針對內嵌目標新增註冊視覺效果視窗,可透過> 偵錯Windows>Embedded Registers取得。

  • 已新增 RTOS 專案的新執行緒檢視,可透過>錯 Windows>RTOS 物件取得。

Visual Studio 17.0 版中的 C++ 新功能

如需 Visual Studio 中新功能和 Bug 修正的摘要,請參閱 Visual Studio 2022 17.0 版版本資訊

  • Visual Studio IDE devenv.exe 現在是原生 64 位應用程式。

  • MSVC 工具組現在預設為偵錯記錄中的 SHA-256 來源雜湊。 先前,工具組預設會使用 MD5 進行來源雜湊。

  • v143 建置工具現在可透過 Visual Studio 安裝程式和 獨立建置工具取得。

原生 C++ 的熱重新載入

  • 熱重新載入 for C++可讓您對執行中的應用程式進行許多類型的程式碼編輯,並加以套用,而不需要使用類似中斷點的應用程式暫停應用程式執行。

在 Visual Studio 2022 中,當您在偵錯工具中啟動應用程式時,您可以使用 [熱重新載入] 按鈕在應用程式仍在執行時修改應用程式。 此體驗由原生編輯和繼續提供。 如需支援編輯的詳細資訊,請參閱 編輯和繼續 (C++)

  • 熱重新載入支援 CMake 和 Open Folder 專案。

WSL2 支援

  • 您現在可以在 WSL2 上原生建置和偵錯,而不需建立 SSH 連線。 支援跨平臺 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 程式選項來列出 CMake 專案的 C++20 模組相依性,如 P1689R4中所述。 這是使用 CMake 建置模組型專案的一個步驟,我們正努力在稍後版本中完成此支援。

標準程式庫改善

選取 [標準程式庫] (STL) 改進功能,此處會醒目提示。 如需新功能、變更、錯誤修正和效能改善的完整清單,請參閱 STL 小組的 Changelog

  • 新增偵錯視覺化檢視,以改善下列類型的顯示方式:、、 (及其反覆運算器) 、、 unreachable_sentinel_tranges::iota_viewranges::empty_viewranges::single_view 、 (及其反覆運算器/sentinel) 、 threadthread::iddefault_sentinel_tranges::ref_view 、 和 jthreadu8stringbind_front()source_locationfilesystem::path
  • 已將 和 中的函式系列新增 [[nodiscard]]stoi() 中的各種函 <locale> 式,例如 collate 成員函式、 has_facet()isalnum() 系列 tolower()<string>
  • P0980R1在 VS 2019 16.10 中製作 std::stringconstexpr 。 現在也支援 Clang。
  • P1004R2在 VS 2019 16.10 中製作 std::vectorconstexpr 。 現在也支援 Clang。

醒目提示的 C++23 功能

  • P1048R1 已新增 is_scoped_enum ,這是 C++ 標準程式庫的新特徵,可偵測類型是否為範圍列舉。
  • P1132R7out_ptr()inout_ptr()
  • P1679R3contains()針對 basic_stringbasic_string_view
  • P1682R3to_underlying()用於列舉
  • P2162R2 允許繼承自 std::variant
  • P2166R1禁止從 建構 basic_stringnullptrbasic_string_view 。 這項變更是來源中斷性變更。 先前在執行時間有未定義行為的程式碼現在會因為編譯器錯誤而遭到拒絕。
  • P2186R2 已移除垃圾收集支援。 這項變更會 declare_reachable 移除 、 undeclare_reachabledeclare_no_pointersundeclare_no_pointersget_pointer_safety 。 先前,這些函式沒有任何作用。

醒目提示的效能改善

  • <format>現在會偵測何時 back_insert_iteratorbasic_string 寫入 或 的 vector ,並在容器的 上 end() 進行更快速的呼叫 insert()
  • 我們已改善 19x 和 26x (時間的 std::find()std::count()vector<bool> 效能,而不是百分比) 。
  • 我們已改善 的 std::count() 效能 vector<bool>
  • std::byte現在與 和 reverse() 具有相同的效能 unsigned charvariant::swap()

Clang 和 LLVM 支援

  • Visual Studio 隨附的 LLVM 工具已升級為 LLVM 12。 如需詳細資訊,請參閱 LLVM 版本資訊

  • Clang-cl 支援已更新為 LLVM 12。

  • 您現在可以使用 LLDB,從 Visual Studio 對遠端系統上執行的進程進行偵錯。

C++ AMP已被取代

  • C++ AMP標頭現在已被取代。 包含在 <amp.h> C++ 專案中會產生建置錯誤。 若要將錯誤靜音,請定義 _SILENCE_AMP_DEPRECATION_WARNINGS 。 如需詳細資訊,請參閱 我們的 AMP 取代連結

IntelliSense 改善

  • 我們在針對匯入的模組和標頭單位的類型提供導覽和語法醒目提示時,改善了 C++ IntelliSense。 IntelliSense 是我們投資的有效領域。 協助我們改善:使用> 說明傳送意見反應分享您對開發人員社群的意見反應

  • 我們已藉由優化快取的標頭使用方式和符號資料庫存取來改善 C++ IntelliSense 效能,以提供改善的載入時間,以進入您的程式碼。

  • 目前預設會開啟適用于 C++ 的 IntelliSense Code Linter,提供立即隨用型建議,並修正常見程式碼瑕疵的建議。

  • CMake 專案的 C++ IntelliSense 現在可在搭配顯示名稱使用預設時運作。

C++ 工作負載更新

  • 已更新為 C++ 行動開發 工作負載中的 NDK r21 LTS。

  • 使用 C++ 進行遊戲開發工作負載現在會安裝最新的 Unreal Engine,並支援 Visual Studio 2022。

程式碼分析改善

  • 程式碼分析現在會強制傳回以 或 標注 _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++ 開發人員社群問題清單

意見反應和建議

希望能夠聽到您的意見! 您可以使用安裝程式或 Visual Studio IDE 右上角的 [傳送意見反應] 圖示,或從[說明>傳送意見反應] 來回報問題或建議功能。 您可以使用Visual Studio 開發人員社群來追蹤您的問題,您可以在其中新增批註或尋找解決方案。 您也可以透過我們的即時聊天支援取得免費的安裝協助。

部落格

利用 Microsoft 開發人員部落格 網站中提供的深入解析和建議。 它們會讓您隨時掌握所有新版本。 部落格包含各種功能的深入探討文章。 您會發現 C++ 小組部落格Visual Studio 部落格 特別感興趣。