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++語言一致性改善 | C++ Visual Studio 2022 17.14 中的一致性改善、行為變更和錯誤修正 |
一些新功能的快速重點提示:
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 藍圖。
- 建置檔案、模組和外掛程式的命令可在Visual Studio中原生使用。
新的編譯程式旗標 /forceInterlockedFunctions 會根據 CPU 的實時功能動態選擇 Armv8.0 負載、儲存獨佔指令或 Armv8.1 大型系統延伸模組(LSE)原子指令。
已在 Visual Studio 中新增以 IntelliSense 為基礎的完成和 CMake 模組的快速資訊支援。 您可以檢視所有可用的 CMake 模組,以及當您將滑鼠停留在參考的 CMake 模組上時,IntelliSense 會提供所選模組的詳細資訊:
螢幕快照是 CMakeLists .txt 檔案中的編輯。 游標位於 include 上 (CMakePrintHelpers )。 Intellisense 說: 列印屬性和變數的便利函式,適用於偵錯。
當您開始在或其他 CMake 腳本檔案中
CMakeLists.txt
輸入 CMake 模組名稱時,IntelliSense 會提供可供選擇的可用模組清單:螢幕快照是 CMakeLists .txt 檔案中的編輯。 游標位於「包含」上(CMake)。 Intellisense 下拉式選單包含 CMake Add Fortran 子目錄、CMake Dependent Option 等項目。
指導方針支持庫(GSL)4.2.0:此版本包含對
gsl::span
效能的改善、新功能,以及更好地符合C++標準。 如需詳細資訊,請參閱 宣佈指導方針支持連結庫 v4.2.0。
Visual Studio 17.13 版中C++的新功能
發行於 2025 年 2 月
如需進一步了解 | 參見 |
---|---|
為 C++ 開發人員提供的新功能 | Visual Studio 2022 17.13 中 C++ 開發人員的新功能 |
標準函式庫(STL)C++26 和 C++23 功能、語言工作小組(LWG)議題解決、效能提升、增強行為,並修正程式錯誤 | STL Changelog 17.13 |
IDE 中的新功能 | Visual Studio 2022 17.13 版版本資訊 |
C++語言更新 | Visual Studio 2022 17.13 MSVC 編譯程式更新 |
C++語言一致性改善 | Visual Studio 2022 17.13 中的 C++一致性改善、行為變更和錯誤修正 |
一些新功能的簡要概述:
C++語言增強功能
將 C++ Language Standard 設定為
/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) { ... }
支援在 x86 和 x64 上生成代碼時的向量長度。 如需詳細資訊,請參閱 /vlen。
支援 Intel 進階向量延伸模組 10 第 1 版。 如需
/arch:AVX10.1
的詳細資訊,請參閱 /arch (x64)。
標準函式庫增強功能
Couroutines 的標準連結庫支援。 在此範例中,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()
演算法系列的建構函式的向量化實作。已新增以下的向量化實作:
- 用於 1 位元組和 2 位元組元素的
find_end()
和ranges::find_end
。 - 作為子字串的
basic_string::find()
和basic_string::rfind()
。 - 對於單一字元
basic_string::rfind()
。
- 用於 1 位元組和 2 位元組元素的
合併的 C++23 瑕疵報告:
GitHub Copilot
GitHub Copilot Free 現已推出。 每月取得 2,000 個程式代碼完成和 50 個聊天要求,不收費。
GitHub Copilot 程式碼補完會在您撰寫程式碼時內嵌提供自動完成建議。 為了增強C++開發人員的體驗,GitHub Copilot 包含其他相關檔案作為內容。 這可減少錯誤,同時提供更相關且精確的建議。
您現在可以從 [Git 變更] 視窗向 GitHub Copilot 要求程式代碼檢閱:
[Git 變更] 視窗隨即開啟,並醒目提示 [GitHub Copilot 檢閱] 按鈕。
GitHub Copilot 會尋找潛在的問題,併為其建立批注:
GitHub Copilot 發現該行程中 if (is_enabled_) new_site.disable(); 存在問題。 它提到這可能是一個錯誤,應該是 if (is_enabled_) new_site.enable(),因為意圖似乎是當啟用斷點時,啟用新網站。
若要使用這項功能,請確認已開啟下列項目:
- [工具]> [選項]> [預覽功能]> [提取要求註解]
- [工具]> [選項]> [GitHub]> [Copilot]> [原始檔控制整合]> [啟用 Git 預覽功能]。
GitHub Copilot 編輯是一項新功能,可在專案中的多個檔案之間進行變更。 若要啟動新的編輯會話,請點擊 GitHub Copilot Chat 視窗頂部的 建立新的編輯會話。
描述您想要進行的變更,Copilot 會建議相關的編輯。 您可以逐一預覽這些編輯,然後接受您想要的編輯或進行更正。
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++語言一致性改善 | C++ Visual Studio 2022 17.12 中的一致性改善、行為變更和錯誤修正 |
一些新功能的快速重點提示:
-
標準函式庫增強功能
- C++23 格式範圍 (P2286R8) 實作完成。 已新增格式器,用於容器適配器
stack
、queue
和priority_queue
。 - 新增多維度下標運算符,也支援
<mdspan>
。 例如:print("m[{}, {}]: '{}'; ", i, j, m[i, j])
。
- C++23 格式範圍 (P2286R8) 實作完成。 已新增格式器,用於容器適配器
-
C++中的遊戲開發
- 直接在 Visual Studio 中開啟 Unreal Engine 專案,而不必產生包裝 Unreal Engine 專案的 Visual Studio 方案檔案。 如需詳細資訊,請參閱 在Visual Studio中使用 Unreal Engine 專案。
- 您可以指定要在直接在工具列中偵錯時傳遞的命令列參數。 如需詳細資訊,請參閱 設定 Unreal Engine 專案的命令行自變數。
-
建立洞見
- 您可以在選取的檔案上執行 Build Insights。 在 方案總管 中選取您想要的檔案,以滑鼠右鍵按兩下,然後選擇 [在選取的檔案上執行組建深入解析]:
- 您可以依項目篩選 Build Insights 結果。 點選篩選欄標題上的篩選按鈕,然後選擇您要檢視結果的專案:
- 按兩下 [建置深入解析] 視窗中的問號圖示,以查看 [組建深入解析] 視窗中索引卷標的簡短描述,以及文件的連結以取得詳細說明:
- 您可以在選取的檔案上執行 Build Insights。 在 方案總管 中選取您想要的檔案,以滑鼠右鍵按兩下,然後選擇 [在選取的檔案上執行組建深入解析]:
-
GitHub Copilot
- 您可以點擊變數的值旁的詢問 Copilot,以獲得由 AI 驅動的深入見解,了解導致其目前狀態的原因。 例如,下列程式在其迴圈條件中有一個 off-by-one 錯誤:
如果您點擊針對造成此問題的程式代碼是:for (auto it = h.animals_.begin(); it <= h.animals_.end(); it++)。
it
變數的 [詢問 Copilot] 圖示,系統會告訴您為什麼它是<NULL>
。此錯誤位於定義為 int calculate_number_of_cats(const house& h) 的函式內。 GitHub Copilot 訊息指出:「表達式的值是 NULL,這表示反覆運算器不會指向向量animals_中的任何有效元素。 在您的程式內容中,它應該逐一查看房屋物件中的animals_向量,以計算貓對象的數目。 為什麼它是空值。 根據局部變數和呼叫堆疊內容:house 物件 h 的 animals_ 向量為空(大小為0)。 it <= h.animals_.end() 的循環條件不正確。 它應該是 != h.animals_.end() 。
- 您可以點擊 Visual Studio 錯誤清單中的 詢問 Copilot 以獲取錯誤的說明和建議的修正。 例如:
如果您按下 [詢問 Copilot],它會告訴您錯誤:Ask Copilot 圖示會被突顯,因unique_ptr嘗試參考已刪除的函式而出現錯誤。
Copilot 訊息說:「錯誤發生,因為 range-based 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++語言一致性改善 | C++ Visual Studio 2022 17.11 中的一致性改善、行為變更和錯誤修正 |
新功能的部分清單:
標準函式庫增強功能
- 格式化的輸出實作現在包含
std::range_formatter
,以及std::pair
和std::tuple
的格式器。 - 已新增支援無參數的
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 記錄,以及快速存取 Visual Studio 的 Unreal Engine 組態頁面。 如需詳細資訊,請參閱 Unreal Engine 工具列。
- 您現在可以依專案篩選追蹤結果。 此外,每個數據列都會顯示相對路徑和檔名,而不是完整路徑。 內含檔案檢視中的結果群組也已改善:
包含的檔案檢視對於專案具有新的欄位。 已選取 [專案] 欄位,並選擇了 [全部選取]、[編譯器ID]、[OpenAL]、[常用] 等專案。 包含的檔案會依相對路徑和檔名列出,並分組在一起。
CMake 偵錯
- 您現在可以透過 Windows 子系統 Linux 版 (WSL) 或 SSH 針對以 Linux 為目標的 CMake 專案,在 Visual Studio 調試程式中對 CMake 腳本和
CMakeLists.txt
檔案進行偵錯。 若要在 Visual Studio 中啟動 CMake 偵錯會話,請在CMakeLists.txt
檔案中設定斷點,然後導航至 項目>設定 CMake 偵錯的快取。
- 您現在可以透過 Windows 子系統 Linux 版 (WSL) 或 SSH 針對以 Linux 為目標的 CMake 專案,在 Visual Studio 調試程式中對 CMake 腳本和
GitHub Copilot
- 當您將滑鼠停留在程式碼編輯器中的符號上方時,請按兩下 [快速資訊] 對話框中的 [Copilot 告訴我更多 ] 按鈕,以深入瞭解指定的符號:
[快速資訊] 視窗顯示在函式上方。 [告訴我更多] 鏈接已醒目提示。
- GitHub Copilot 可以根據標識符的使用方式和程式代碼樣式,為您的標識碼(變數、方法或類別)產生命名建議。
[重新命名] 對話框具有 [新增名稱] 字段,其中包含顯示這些選項的下拉式清單:text_color、font_color、display_color、console_color和menu_text_color。
您需要有效的 GitHub Copilot 訂用帳戶。 以滑鼠右鍵按下您要重新命名的變數,然後選擇 [重新命名 ] (
Ctrl+R
,Ctrl+R
。 選取 GitHub Copilot sparkle 圖示以產生命名建議。偵錯
- 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 版本在 Visual Studio 2022 發行中都是 19.3X 的專案,請參閱 VS 2022 v17.10 中的 MSVC 工具組次要版本號碼 14.40。
-
標準庫增強功能:標準庫已新增對 P2510R3指標格式化的支持,使其指標的格式規範更符合於
std::format
已存在的整數規範。 已改善std::min_element
、std::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 元件:
GitHub Copilot 介面位於 Visual Studio 右上角。 若要使用它,您需要一個作用中的 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 檔案的引用(此案例中為 1)。 也列出了建置時間 (在本例中小於 1/2 秒)。
- 記憶體佈局視覺化,顯示如何為您的類別、結構和聯合配置記憶體。 將滑鼠游標暫留在類型上,然後選擇 [快速諮詢] 中的 [記憶體配置] 連結,以開啟顯示所選類型的記憶體配置的專用視窗。 將滑鼠游標暫留在此視窗內的個別資料類型上可提供有關其大小和類型內偏移量的詳細資訊。
記憶體配置視窗顯示了 Snake 類別的內容。 它顯示了該類別中各個欄位的記憶體偏移量,例如用於頭部和身體位置的點類別、分數等等。
- 您現在可以指定自己的自訂 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()
作為 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 的大小和對齊方式。 將滑鼠游標暫留在標識符上,Quick Info 即會顯示大小和對齊資訊。
- 一項功能,建議何時標記成員函式
const
,因為它們不會修改物件的狀態。 將滑鼠游標暫留在成員函式上,然後按一下燈泡圖示,將函式標記為const
。 - Visual Studio 現在會提示您透過函式名稱旁邊顯示的螺絲起子圖示將全域函式標記為靜態。 按一下螺絲起子圖示,將功能標記為靜態。
- 未使用的 #include 指示詞會在編輯器中呈現暗灰色。 您可以將滑鼠游標暫留在暗灰色的包含項目上,並使用燈泡功能表來移除該包含項目或所有未使用的項目。 您也可以為透過其他標頭間接包含的實體新增
#include
指示詞。 如需詳細資訊,請參閱在 Visual Studio 中清理 C/C++ 包含檔案。 - 更多 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::move
、std::forward
、std::move_if_noexcept
和std::forward_like
現在不會在生成的程式碼中產生函式呼叫,即使在偵錯模式中也是如此。 此變更可避免具名轉換在偵錯組建中造成不必要的額外負荷。 需要/permissive-
(或暗示它的選項,例如/std:c++20
或std:c++latest
)。新增了
[[msvc::intrinsic]]
。 您可以將此屬性套用至僅包含一次轉換的非遞歸函式,該函式僅接受一個參數。已在整合式終端中新增了對 Linux 主控台的支援 (允許進行終端 I/O)。
已加入對 C11 原子操作基元 (
<stdatomic.h>
) 的初步實驗性支援。 您可以在/experimental:c11atomics
模式或更新版本中使用/std:c11
選項來啟用此實驗性功能。已將一組實驗性高信賴度檢查新增至「存留期檢查程式」,以減少干擾。
新的預覽功能「遠端檔案總管」可讓您在 VS 內檢視遠端電腦上的檔案目錄,並向其中上傳和下載檔案。
已變更 Visual Studio 隨附的 CMake 可執行檔版本設定,以符合 Kitware 版本。
新增了對 CMake 專案範本的熱重新載入支援。
C++ 的 "Go To Definition" 功能現在使用較不顯眼的指示器,來顯示需時較久的操作,取代了舊版的模式對話框。
已開始推出一項實驗,旨在為 C++ 自動完成和成員清單提供更智慧的結果。 這項功能先前稱為 Predictive IntelliSense,但現在使用新的顯示方式。
現在,我們隨 LLVM 工作負載一起提供了原生 Arm64 Clang 工具組,以允許在 Arm64 機器上進行原生編譯。
已將當地語系化新增至影像監看擴充功能 (此擴充功能可在 Marketplace 中取得,且不會透過 Visual Studio 安裝程式組合在一起提供)。
已新增在目前執行中的開發人員容器中開啟終端機視窗的支援。
已對 IntelliSense 巨集擴展進行了多項改進。 值得注意的是,我們在更多情境中啟用了遞迴擴展,並新增選項至彈出視窗中,以將擴展複製到剪貼簿或內嵌展開巨集。
「序列監視器」現在支援並行監視。 並行監視可讓您同時並排監視多個連接埠。 按加號按鈕,即可開啟另一個「序列監視器」並開始使用。
現在,您可以在不離開 Visual Studio 的情況下檢視在 Unreal Blueprint 資產中所修改的基類屬性。 在 Visual Studio 中,雙擊 C++ 類別或屬性的 Blueprint 參考,以開啟 UE Asset Inspector。
已允許在遠端 Linux 電腦上執行 DevContainers。
已允許在 [CMake 目標] 檢視中選取要建置的多個目標。
已新增對 CMakePresets.json 第 5 版的支援。 如需新功能的資訊,請參閱 CMake 文件。
已啟用 [測試總管],以便以平行方式建置及測試多個 CMake 目標。
已將 [在終端機中開啟容器] 選項新增至 [開發容器]。
已實作標準程式庫功能:
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。
- 使用者傳遞
/Od
選項、或使用/Zc:nrvo
及其之後的版本,或/std:c++20
時,即使在/permissive-
下也會啟用 NRVO。 - 您現在可以使用
/Zc:nrvo-
選項停用 NRVO。
Visual Studio 隨附的 LLVM 版本已升級為 15.0.1。 如需可用內容的詳細資訊,請參閱 LLVM 和 Clang 版本資訊。
為支援使用 CMake 專案的 vcpkg 成品,已為 Visual Studio 增加支援。 對於包括 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::contains
、ranges::contains_subrange
P2499R0
string_view
範圍建構函式應為explicit
P0849R8
auto(x)
:語言中的衰變複製(編譯器部分尚未實作。最初實作 Ranges 支援時,程式庫部分是在 C++20 模式下實作的。)
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 工具後,開啟終端機工具視窗。 終端機下拉式清單中填入了您所儲存的連線。 當您選取連線時,會在 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 隨附的 LLVM 工具版本已升級至 14 版。 如需可用內容的詳細資料,請參閱 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 中對其進行嘗試。 可透過開發人員社群回報其餘的問題。
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 的功能 推導
this
和if 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 存放庫中的 VS 2022 Changelog,以及 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 隨附的
Clang
和LLVM
版本已升級為 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)問題解決、效能改善、增強功能,以及修復錯誤 | 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 現在支援
buildPresets.targets
中的CMakePresets.json
選項。 此選項可讓您在 CMake 專案中建置目標的子集。CMake 專案中的 [專案] 功能表已簡化,並公開了 [刪除快取和重新設定] 及 [檢視快取] 的選項。
已實作
/scanDependencies
編譯器選項來列出 CMake 專案的 C++20 模組相依性,如 P1689R5 中所述。 這是支援使用 CMake 建置模組型專案的一步,我們正在努力在以後的版本中完成此支援。
標準程式庫改善
這裡強調選擇性的標準程式庫 (STL) 改進。 如需新功能、變更、錯誤修正和效能改善的完整清單,請參閱 STL 小組的變更記錄。
- 已新增偵錯視覺化工具以改進以下類型的顯示方式:
source_location
、bind_front()
、u8string
(及其迭代器)、default_sentinel_t
、unreachable_sentinel_t
、ranges::empty_view
、ranges::single_view
、ranges::iota_view
(及其迭代器/sentinel)、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 新增了
is_scoped_enum
,這是 C++ 標準程式庫的新特性,它會偵測類型是否為有限範圍列舉。 -
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 是我們積極投資的領域。 協助我們改善:使用 [說明]>[傳送意見反應],在開發人員社群上分享您的意見反應。
- 我們已透過最佳化快取標頭使用和符號資料庫存取來改善 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_
的函式的傳回值。 - 我們的程式碼分析工具已增強對空指標取值的偵測。
- 已將
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 部落格特別令人感興趣。