共用方式為


Visual Studio 2022 中 C++ 的新功能

Visual Studio 2022 為 Microsoft C++ 編譯器和工具帶來了許多更新和修正。 Visual Studio IDE 也大幅改善了效能和生產力,現在可以作為 64 位元應用程式以原生方式執行。

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

發行於 2024 年 11 月

如需 請參閱
為 C++ 開發人員提供的新功能 Visual Studio 2022 17.12 中C++開發人員的新功能
標準連結庫 (STL) 已合併C++26和 C++23 功能、LWG 問題解決、效能改善、增強行為,以及修正 Bug STL Changelog 17.12
Visual Studio 17.12 IDE 中的新功能 Visual Studio 2022 17.12 版版本資訊
Visual Studio 2022 17.12 中的C++語言一致性改善 C++ Visual Studio 2022 17.12 中的一致性改善、行為變更和錯誤修正

一些新功能的快速醒目提示:

  • 標準連結庫增強功能
    • C++23 格式範圍 (P2286R8) 實作完成。 已新增容器配接器 stackqueuepriority_queue的格式器。
    • 新增多維度下標運算符,也支援 <mdspan>。 例如: print("m[{}, {}]: '{}'; ", i, j, m[i, j])
  • C++中的遊戲開發
    • 直接在 Visual Studio 中開啟 Unreal Engine 專案,而不必產生包裝 Unreal Engine 專案的 Visual Studio 方案檔案。 如需詳細資訊,請參閱 在Visual Studio中使用 Unreal Engine 專案。
    • 您可以指定要在直接從工具列偵錯時傳遞的命令行自變數。 如需詳細資訊,請參閱 設定 Unreal Engine 專案的命令行自變數。 命令行自變數下拉式清單的螢幕快照。它包含一個命令行自變數:-graphicsadaptor=0。
  • 建置深入解析
    • 您可以在選取的檔案上執行 Build Insights。 在 方案總管 中選取您想要的檔案,以滑鼠右鍵按兩下,然後選擇 [在選取的檔案上執行組建深入解析]:方案總管 中檔案的螢幕快照。操作功能表隨即開啟,並醒目提示 [在選取的檔案上執行組建深入解析] 選項。
    • 您可以依項目篩選 Build Insights 結果。 點選取您要檢視結果的專案: [建置深入解析] 視窗的螢幕快照,其中已開啟 [包含的檔案] 索引標籤。已選取篩選按鈕,且專案清單隨即出現。核取 [兩個專案] 旁的複選框。
    • 按兩下 [建置深入解析] 視窗中的問號圖示,以查看 [組建深入解析] 視窗中索引卷標的簡短描述,以及文件的連結以取得詳細說明: [建置深入解析] 視窗的螢幕快照,其中已醒目提示 [檢視說明] 按鈕(圓形中的問號)。
  • GitHub Copilot
    • 您可以按兩下 變數值旁的 [詢問 Copilot ],以取得 AI 驅動深入解析導致其目前狀態的內容。 例如,下列程式在其迴圈條件中有一個 off-by-one 錯誤:

    [自動變數] 視窗的螢幕快照。名為它的變數為 NULL。其旁邊的 [詢問 Copilot] 圖示會反白顯示。

    造成此問題的程式代碼是:for (auto it = h.animals_.begin(): 它<= h.animals_.end(; it++)。

    如果您按下變數的 it [詢問 Copilot] 圖示,它會告訴您其 <NULL>原因:

    GitHub Copilot 視窗的螢幕快照。

    此錯誤位於定義為 int calculate_number_of_cats(const house& h) 的函式內。 GitHub Copilot 訊息指出:「表達式的值是 NULL,這表示反覆運算器不會指向向量animals_中的任何有效元素。 在您的程式內容中,它應該逐一查看房屋物件中的animals_向量,以計算貓對象的數目。 為什麼它是 Null。 根據局部變數和呼叫堆疊內容:house 物件 h 具有空的animals_向量(size=0)。 <= h.animals_.end() 的循環條件不正確。 它應該是 != h.animals_.end()。

    • 您可以在 Visual Studio 錯誤清單中按兩下 [詢問 Copilot 錯誤] 以取得錯誤的說明和建議的修正。 例如:

    [錯誤清單] 視窗的螢幕快照。

    [詢問 Copilot] 圖示會反白顯示unique_ptr嘗試參考已刪除函式的錯誤旁邊。

    如果您按下 [詢問 Copilot],它會告訴您錯誤:

    錯誤 GitHub Copilot 說明的螢幕快照。

    Copilot 訊息說:「錯誤會發生,因為無法複製 std::unique_ptr 無法複製 std::unique_ptr 物件的範圍型 for 迴圈。 若要修正此問題,我已將 迴圈變更為使用參考,以避免複製 std::unique_ptr 物件。 如此一來,迴圈會逐一查看允許的 std::unique_ptr 對象參考。

  • 偵錯
    • 、 和move_iterator的新偵錯可視化檢視mutexrecursive_mutex
    • 除錯程式現在會顯示內嵌傳回值: 顯示值 8.25 的工具提示螢幕快照。這是在傳回語句之後逐步執行表達式的結果。

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++語言一致性改善 C++ Visual Studio 2022 17.11 中的一致性改善、行為變更和錯誤修正

新功能的部分清單:

  • 標準連結庫增強功能

    • 格式化的輸出實作現在包含 std::range_formatter 和的 和格式子std::pairstd::tuple
    • 已新增沒有自變數的支援 std::println() 。 這會列印P3142R0中建議的空白行。
    • 改善數種演算法的向量化,包括 replace_copy()replace_copy_if()ranges::replace_copyranges::replace_copy_iffind_first_of()ranges::find_first_of,適用於8位和16位元素、mismatch()ranges::mismatchcount() ranges::countfind()ranges::findranges::find_lastranges::iota
  • C++中的遊戲開發

    • 您現在可以從 Visual Studio 中新增常見的 Unreal Engine 類別範本、模組和外掛程式。 如需詳細資訊,請參閱 在 Visual Studio 中新增 Unreal Engine 類別、模組和外掛程式。
    • 新的 Unreal Engine 工具列可讓您從 Visual Studio 中快速存取 Unreal Engine 相關動作。 工具列可讓您快速附加至 Unreal Engine 程式、重新掃描藍圖快取、快速存取 Unreal Engine 記錄,以及快速存取 Visual Studio 的 Unreal Engine 組態頁面。 如需詳細資訊,請參閱 Unreal Engine 工具列
    • 您現在可以依專案篩選追蹤結果。 此外,每個數據列都會顯示相對路徑和檔名,而不是完整路徑。 [內含檔案] 檢視中的結果群組也已改善:

    改善內含檔案診斷結果的螢幕快照。

    [包含的檔案] 檢視具有專案的新數據行。 已選取 [專案] 數據行,並選取 [全部選取]、[編譯程序標識符]、[OpenAL]、[一般] 等專案。 包含的檔案會依相對路徑和檔名列出,並分組在一起。

  • CMake 偵錯

    • 您現在可以透過 Windows 子系統 Linux 版 (WSL) 或 SSH 針對以 Linux 為目標的 CMake 專案,在 Visual Studio 調試程式中對 CMake 腳本和CMakeLists.txt檔案進行偵錯。 若要在 Visual Studio 中啟動 CMake 偵錯會話,請在檔案CMakeLists.txt中設定斷點,然後流覽至 [使用 CMake 偵錯進行項目>設定快取]。
  • GitHub Copilot

    • 當您將滑鼠停留在程式碼編輯器中的符號上方時,請按兩下 [快速資訊] 對話框中的 [Copilot 告訴我更多 ] 按鈕,以深入瞭解指定的符號:

    [快速諮詢] 視窗的螢幕快照。

    [快速諮詢] 視窗會顯示在函式上方。 [告訴我更多] 鏈接已醒目提示。

    • GitHub Copilot 可以根據標識符的使用方式和程式代碼樣式,為您的標識碼(變數、方法或類別)產生命名建議。

      GitHub Copilot 重新命名對話框的螢幕快照。

      [重新命名] 對話框具有 [新增名稱] 字段,其中包含顯示這些選項的下拉式清單:text_color、font_color、display_color、console_color和menu_text_color。

    您需要有效的 GitHub Copilot 訂用帳戶。 以滑鼠右鍵按下您要重新命名的變數,然後選擇 [重新命名 ] (Ctrl+RCtrl+R。 選取 GitHub Copilot sparkle 圖示以產生命名建議。

  • 偵錯

    • 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 版本都是 Visual Studio 2022 版本的 19.3X,請參閱 VS 2022 v17.10 中的 MSVC 工具組次要版本號碼 14.40
  • 標準連結庫增強功能:標準連結庫已新增對 P2510R3格式指標的支持,當使用更多格式規範與已存在整數的指標時 std::format ,會帶來指標的格式規範集。 已改善 std::min_elementstd::ranges::min 以及相關函數的向量化實作。
  • Build Insights:現在提供範本具現化資訊。 請參閱「Visual Studio 中的 Build Insights 的範本檢視」「純虛擬 C++ - Visual Studio 中的 Build Insights 的範本檢視」錄製內容。
  • Unreal Engine 外掛程式:Unreal Engine 外掛程式有一個新的選擇加入功能,可以在背景中執行,從而降低啟動成本。 這是一個可透過 [工具]>[選項]>[Unreal Engine] 啟用的選擇加入功能。
  • Linux 的新功能:請參閱 Visual Studio 中的新 Linux 開發功能
  • CMake 目標:您現在可以在 CMake 目標檢視中釘選目標。
  • 連線管理員使用者體驗 (UX):使用者體驗在連線到遠端系統時可提供更順暢的體驗。 如需詳細資訊,請參閱 Visual Studio 連線管理員中的可用性改進
  • 提取要求註解:您現在可以直接在工作檔案中檢視 GitHub 和 Azure DevOps 註解。 在 [選項]>[環境]>[預覽功能] 中啟用功能旗標「提取要求註解」,並簽出提取要求分支以開始。
  • AI 生成的內容:GitHub Copilot 現在可以起草提取要求描述。 需要一個作用中的 GitHub Copilot 訂用帳戶。 按一下 [建立提取要求] 視窗中的 [新增 AI 生成的提取要求描述] 閃光筆圖示來試試看。
  • 影像預覽:將滑鼠游標暫留在影像路徑上以查看具有大小詳細資料的預覽。 大小上限為 500 像素寬和高。

    滑鼠游標暫留預覽的螢幕擷取畫面。

    滑鼠游標暫留在 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 元件:

    Visual Studio 安裝程式 GitHub Copilot 安裝選項的螢幕擷取畫面。

    GitHub Copilot 介面位於 Visual Studio 右上角。 若要使用它,您需要一個作用中的 GitHub Copilot 訂用帳戶。

    GitHub Copilot 按鈕的螢幕擷取畫面。

    GitHub Copilot 按鈕會顯示在 Visual Studio 右上角。 它具有開啟聊天視窗、GitHub Copilot 設定、深入了解及管理 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 診斷的螢幕擷取畫面。

    在 # include 上方是 **reference** 連結,而此 #include 檔案的許多參考 (在此案例中為 1)。 也列出了建置時間 (在本例中小於 1/2 秒)。

  • 記憶體配置視覺效果,其中顯示如何為您的 class、struct 及 union 安排記憶體。 將滑鼠游標暫留在類型上,然後選擇 [快速諮詢] 中的 [記憶體配置] 連結,以開啟顯示所選類型的記憶體配置的專用視窗。 將滑鼠游標暫留在此視窗內的個別資料類型上可提供有關其大小和類型內偏移量的詳細資訊。

    記憶體配置視窗的螢幕擷取畫面

    記憶體配置視窗顯示了 Snake 類別的內容。 它顯示了該類別的各個欄位的記憶體偏移量,例如用於頭部和身體位置的 Point 類別、分數等等。

  • 您現在可以指定自己的自訂 CMake 可執行檔。 如果您想要使用未隨附於 Visual Studio 的特定 CMake 版本,則此功能非常有用。 瀏覽至 [工具]>[選項],然後選取 [CMake]>[一般]。 選取 [啟用自訂 CMake 可執行檔],然後指定您的 CMake 可執行檔的目錄路徑。

    CMake 選項對話方塊的螢幕擷取畫面

    CMake 選項對話方塊,其中醒目顯示了 [啟用自訂 CMake 可執行檔案] 選項和 [CMake 可執行檔案目錄] 欄位。

  • 改進了 Unreal Engine 專案的 IntelliSense。
  • 改善的 C++23 支援:std::formatstd::spanformattablerange_formatformat_kindset_debug_format() 作為 P2286R8 格式化範圍<mdspan> 的一部分 (根據 P0009R18 以及套用於 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++ 改善的一年

新功能的部分清單:

  • [輸出] 視窗中的 C++ 結構化診斷,以及提供錯誤詳細資訊的新問題詳細資料視窗。 如需詳細資訊,請參閱結構化 SARIF 輸出問題詳細資料視窗
  • 新增一項功能,使您甚至可以在編譯程式碼之前就可以視覺化您的 class、struct、union、基本類型或 enum 的大小和對齊方式。 將滑鼠游標暫留在識別碼上,[快速諮詢] 即會顯示大小和對齊方式資訊。
  • 新增一項功能,可建議何時標記成員函式 const,因為它們不會修改物件的狀態。 將滑鼠游標暫留在成員函式上,然後按一下燈泡圖示,將函式標記為 const
  • Visual Studio 現在會提示您透過函式名稱旁邊顯示的螺絲起子圖示將全域函式標記為靜態。 按一下螺絲起子圖示,可將函式標記為靜態。
  • 未使用的 #include 指示詞會在編輯器中呈現暗灰色。 您可以將滑鼠游標暫留在暗灰色的 include 上,並使用燈泡功能表來移除該 include 或所有未使用的 include。 您也可以為透過其他標頭間接包含的實體新增 #include 指示詞。 如需詳細資訊,請參閱在 Visual Studio 中清理 C/C++ 的 include
  • 更多 Unreal Engine 支援:
    • Unreal Engine 測試配接器可讓您探索、執行、管理及偵錯您的 Unreal Engine 測試,而不需要離開 Visual Studio IDE。
    • 透過 Unreal Engine 程式碼片段,您可以在您的成員清單中找到常見的 Unreal Engine 建構作為程式碼片段。
    • Build Insights 現在已與 Visual Studio 2022 整合,並可使用 MSVC 與 MSBuild 和 CMake 專案搭配使用。 您現在可以查看函式編譯的其他相關資訊,例如編譯所花費的時間和 ForceInlines 的數目,以及標頭檔對建置時間的影響。 如需詳細資訊,請參閱教學課程:針對建置時間內嵌的函式進行疑難解答教學課程:對標頭檔在建置時間方面的影響進行疑難排解
  • 遠端 Linux 單元測試支援現在可讓您從 Visual Studio 的測試總管在遠端 Linux 機器上執行 CTest 和 GTest 測試,就像本機測試一樣。

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

2023 年 8 月發行

如需 請參閱
為 C++ 開發人員提供的新功能 Visual Studio 2022 17.7 中C++開發人員的新功能
遊戲開發特有的新 C++ 功能 釋放 Visual Studio 2022 在 C++ 遊戲開發中的潛力
標準程式庫 (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++ 一致性改善、行為變更和錯誤修正

新功能的部分清單:

  • 更快速的偵錯工作階段和更快的專案載入時間
  • 巨集擴充的逐步視覺效果
  • 一鍵下載 Windows 子系統 Linux 版 (WSL)
  • 已改善對 Doxygen 註解的支援
  • 用於遊戲開發的 C++ Build Insights
  • 為 C 編譯器新增了 /std:clatest
  • Unreal Engine 專案改善,例如更快的 IntelliSense 和語法顏色標示、尋找所有 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 指令碼偵錯
  • 對 High Level Shading Language (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::movestd::forwardstd::move_if_noexceptstd::forward_like 現在不會在生成的程式碼中產生函式呼叫,即使在偵錯模式中也是如此。 此變更可避免具名轉換在偵錯組建中造成不必要的額外負荷。 需要 /permissive- (或暗示它的選項,例如 /std:c++20std:c++latest)。

  • 新增了 [[msvc::intrinsic]]。 您可以將此屬性套用至由單一轉換組成的非遞歸函式,該函式只採用一個參數。

  • 已在整合式終端中新增了對 Linux 主控台的支援 (允許進行終端 I/O)。

  • 已新增對 C11 不可部分完成基本型別 (<stdatomic.h>) 的初始實驗性支援。 您可以在 /std:c11 模式或更新版本中使用 /experimental:c11atomics 選項來啟用此實驗性功能。

  • 已將一組實驗性高信賴度檢查新增至「存留期檢查程式」,以減少干擾。

  • 新的預覽功能「遠端檔案總管」可讓您在 VS 內檢視遠端電腦上的檔案目錄,並向其中上傳和下載檔案。

  • 已變更 Visual Studio 隨附的 CMake 可執行檔版本設定,以符合 Kitware 版本。

  • 已將熱重新載入的支援新增至 CMake 專案範本中。

  • C++ 的 [移至定義] 功能現在使用需要更多時間的更細妙的作業指標,取代了舊版的強制回應對話方塊。

  • 已開始推出一項實驗,可在 C++ 自動完成和成員清單中提供其他的智慧結果。 這項功能先前稱為預測性 IntelliSense,但現在使用新的呈現方法。

  • 現在,我們隨 LLVM 工作負載一起提供了原生 Arm64 Clang 工具組,以允許在 Arm64 機器上進行原生編譯。

  • 已將當地語系化新增至影像監看擴充功能 (此擴充功能可在 Marketplace 中取得,且不會透過 Visual Studio 安裝程式組合在一起提供)。

  • 已新增在目前執行中的開發人員容器中開啟終端機視窗的支援。

  • 已對 IntelliSense 巨集擴充內容進行了數項改進。 值得注意的是,我們在更多情境中啟用了遞迴擴充內容,並將選項新增至快顯視窗中,以將擴充內容複製到剪貼簿或在行內展開巨集。

  • 「序列監視器」現在支援並行監視。 並行監視可讓您同時並排監視多個連接埠。 按加號按鈕,即可開啟另一個「序列監視器」並開始使用。

  • 現在,您可以在不離開 Visual Studio 的情況下檢視在 Unreal Blueprint 資產中所修改的基類屬性。 在 Visual Studio 中,按兩下 Blueprint 中的 C++ 類別或屬性參考,以開啟 UE Asset Inspector。

  • 已允許在遠端 Linux 電腦上執行 DevContainers。

  • 已允許在 [CMake 目標] 檢視中選取要建置的多個目標。

  • 已新增對 CMakePresets.json 第 5 版的支援。 如需新功能的資訊,請參閱 CMake 文件

  • 已啟用 [測試總管],以便以平行方式建置及測試多個 CMake 目標。

  • 已將 [在終端機中開啟容器] 選項新增至 [開發容器]。

  • 已實作標準程式庫功能:

    • P2508R1 basic_format_stringformat_stringwformat_string
    • P2322R6 ranges::fold_leftranges::fold_right 等等。
    • P2321R2 views::zip (不包括 zip_transformadjacentadjacent_transform)

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 中新功能的部分清單:

  • 已改善編譯器錯誤訊息,以提供更正確且有用的資訊,尤其是概念。

  • 新增了實驗性 MSVC 選項 /experimental:log<directory> 以將結構化 SARIF 診斷輸出到指定的目錄。

  • 已將 C23 屬性的支援新增至 IntelliSense,並在 C++20 模組支援中持續進行。

  • 已改善開啟新解決方案時的編製索引效能。 從 17.3 起大型專案可能會改善 20-35%。

  • 已改善具名傳回值最佳化 (NRVO):

    • 會針對涉及例外狀況處理或迴圈的案例啟用 NRVO。
    • 如果使用者傳遞 /Zc:nrvo 選項、/std:c++20 或更新版本,或 /permissive-,則即使在 /Od 下也會啟用 NRVO。
    • 您現在可以使用 /Zc:nrvo- 選項停用 NRVO。
  • Visual Studio 隨附的 CMake 版本已升級為 15.0.1。 如需可用內容的詳細資訊,請參閱 LLVMClang 版本資訊。

  • 已使用 CMake 專案新增對 Visual Studio for vcpkg 成品的支援。 對於包括 vcpkg 資訊清單的專案,環境會在專案開啟時自動啟動。 可在 Visual Studio 中的 vcpkg 環境啟用部落格文章中深入了解此功能。

  • 您現在可以針對 C++ 專案使用開發容器。 請在我們的適用於 C++ 的開發容器部落格文章中深入了解此功能。

  • 現在的 IntelliSense 在其中一個是先行編譯標頭檔 (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++ 標準化的最新發展。 您可以在編譯器選項中包含 /std:c++latest,以取得對這些 C++23 功能的支援:

    • P2302R4 ranges::containsranges::contains_subrange

    • P2499R0 string_view 範圍建構函式應為 explicit

    • P0849R8 auto(x):語言中的 decay-copy

      (編譯器部分尚未實作。最初實作 Ranges 支援時,程式庫部分是在 C++20 模式下實作的。)

    • P0881R7 <stacktrace>

    • P2301R1std::stacktrace 新增 pmr 別名

    • P1328R1 constexpr type_info::operator==()

    • P2440R1 ranges::iotaranges::shift_leftranges::shift_right

    • P2441R2 views::join_with

  • 已新增 [建立宣告/定義之後瀏覽] 選項,讓您選擇 [建立宣告/定義] 功能的瀏覽行為。 您可以在瞄核 (預設值) 或開啟文件或沒有瀏覽之間選取。

  • Visual Studio 的 Arm64 組建現在會組合 Arm64 版本的 CMake 和 Ninja。

  • 已新增 CMake 預設第 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 工具後,開啟終端機工具視窗。 終端機下拉式清單中填入了您所儲存的連線。 當您選取連線時,會在 Visual Studio 內開啟一個新的 [終端機] 視窗,其中會顯示遠端系統上的虛擬終端機。 控制字元、色彩和游標位置感知全都支援。
  • Visual Studio 現在可為您的 UE 專案新增 Unreal Engine 類別範本。 若要嘗試此功能,請確定在 Visual Studio 安裝程式的 [使用 C++ 進行遊戲開發] 工作負載中選取了 [對 Unreal Engine 的 IDE 支援]。 當您處理 UE 專案時,請以滑鼠右鍵按一下專案或資料夾/篩選器,然後選取 [新增]>[UE 類別]
  • [移至定義] 現在會記住先前的簽章,並在沒有更好的相符項時 (例如,在您手動變更其中一對的簽章之後) 進行相應的巡覽。 已改善 [移至全部] 的回應性。 之前,結果會出現在您停止輸入之後。 在新的體驗中,結果會在您鍵入時顯示。
  • 在需要 enum 類型完成的內容中 (例如,對 enum 變數、case 標籤、傳回 enum 類型等賦值),自動完成清單現在會篩選為僅顯示相符的列舉值和相關的建構。
  • 已新增以 .NET Core 為目標的 C++/CLI MSBuild 專案的 NuGet PackageReference 支援。 這項變更是為了解除封鎖混合程式碼基底,使其無法採用 .NET Core。 此支援不適用於其他 C++ 專案類型或任何以 .NET Framework 為目標的 C++ 專案類型。 沒有計劃將 PackageReference 支援延伸到其他 C++ 場景。 小組正在處理關於 vcpkg 在非 MSBuild 場景中的不同使用體驗,並增加更強大的功能。
  • 新增了一個用於內嵌開發的 [序列監視器] 視窗 (可透過 [偵錯]>[視窗]>[序列監視器] 取得)。
  • 相較於 17.2,C++ 索引編制已改善 ~66%。
  • 已將隨附於 Visual Studio 的 CMake 版本更新到 3.23 版。 請參閱 CMake 3.23 版本資訊,以了解可用功能的詳細資料。
  • Visual Studio 隨附的 CMake 版本已升級為第 14 版。 如需可用內容的詳細資料,請參閱 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++ 的新功能

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 中新功能的部分清單:

  • 已新增編譯器支援 C++23 的功能 deducing this (可在 /std:c++latest 選項下取得)。
  • 已新增 IntelliSense 支援 C++23 的功能 deducing 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++ 的新功能

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 中新功能的部分清單:

  • 已新增新的設定預設配置範本,以便使用 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 整合功能。
  • 新增了新的檢視,可讓您檢查微控制器和即時作業系統 (RTOS) 物件上的周邊暫存器並與其互動,這些物件可透過 [偵錯]>[視窗]>[內嵌暫存器] 取得
  • 已為 RTOS 專案新增了新的執行緒檢視 (可透過 [偵錯]>[視窗]>[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 問題解決、效能改善、增強行為,以及修正 Bug 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 和 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 現在支援 CMakePresets.json 中的 buildPresets.targets 選項。 此選項可讓您在 CMake 專案中建置目標的子集。

  • CMake 專案中的 [專案] 功能表已簡化,並公開了 [刪除快取和重新設定] 及 [檢視快取] 的選項。

  • 已實作 /scanDependencies 編譯器選項來列出 CMake 專案的 C++20 模組相依性,如 P1689R5 中所述。 這是支援使用 CMake 建置模組型專案的一步,我們正在努力在以後的版本中完成此支援。

標準程式庫改善

這裡強調精選的標準程式庫 (STL) 的改進。 如需新功能、變更、錯誤修正和效能改善的完整清單,請參閱 STL 小組的變更記錄

  • 已新增偵錯視覺化工具以改進以下類型的顯示方式:source_locationbind_front()u8string (及其迭代器)、default_sentinel_tunreachable_sentinel_tranges::empty_viewranges::single_viewranges::iota_view (及其迭代器/sentinel)、ranges::ref_viewthreadthread::idjthreadfilesystem::path
  • 已將 [[nodiscard]] 新增至 <string> 中的 stoi() 系列函式以及 <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 新增了 is_scoped_enum,這是 C++ 標準程式庫的新特性,它會偵測類型是否為有限範圍列舉。
  • P1132R7 out_ptr()inout_ptr()
  • P1679R3 contains() 用於 basic_stringbasic_string_view
  • P1682R3 to_underlying() 用於列舉
  • P2162R2 允許從 std::variant 繼承
  • P2166R1 禁止從 nullptr 建構 basic_stringbasic_string_view。 此變更是一個重大的原始程式碼變更。 先前在執行階段具有未定義行為的程式碼現在會因編譯器錯誤而被拒絕。
  • P2186R2 已移除記憶體回收支援。 此變更移除了 declare_reachableundeclare_reachabledeclare_no_pointersundeclare_no_pointersget_pointer_safety。 先前,這些函式沒有任何作用。

突顯的效能改善

  • <format> 現在可以偵測到它正在寫入 basic_stringvectorback_insert_iterator,並在容器的 end() 位置更快速地呼叫 insert()
  • 我們將 std::find()std::count()vector<bool> 上的效能分別提高了 19x 和 26x (倍,而不是百分比)。
  • 我們已改善 std::count()vector<bool> 上的效能
  • 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 是我們積極投資的領域。 協助我們改善:使用 [說明]>[傳送意見反應],在開發人員社群上分享您的意見反應。
  • 我們已透過最佳化快取標頭使用和符號資料庫存取來改善 C++ IntelliSense 效能,進而改善載入程式碼的載入時間。
  • IntelliSense Code Linter for C++ 現在預設為開啟,提供立即隨用即用的建議,並修正常見程式碼瑕疵的建議。
  • 現在,當 CMake 專案使用含顯示名稱的預設配置時,C++ IntelliSense 功能可以正常運作。

C++ 工作負載更新

  • 已更新為 C++ 行動開發工作負載中的 NDK r21 LTS。
  • [使用 C++ 進行遊戲開發] 工作負載現在會安裝最新的 Unreal Engine 並支援 Visual Studio 2022。

程式碼分析改善

  • 程式碼分析現在會強制傳回以 _Check_return__Must_inspect_result_ 標註的函式值,否則必須加以檢查。
  • 我們的程式碼分析工具已改善 null 指標取值 (Dereference) 偵測。
  • 已將 gsl::not_null 的支援新增至程式碼分析。
  • /fsanitize=fuzzer 編譯器選項下對 Libfuzzer 的支援。

舊版的版本資訊

也提供舊 C++ 版本的版本資訊:

已知問題

C++ IntelliSense

如需 Visual Studio 2022 中 C++ 的其他開放問題和可用因應措施的詳細資訊,請參閱 C++ 開發人員社群問題清單

意見反應與建議

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

部落格

利用 Microsoft 開發人員部落格網站中提供的深入解析和建議來了解所有新版本的最新資訊。 這些部落格包含有關廣泛功能的深入探討文章。 C++ 小組部落格Visual Studio 部落格特別令人感興趣。