我嘗試運行代碼
#include <string>
#include <iostream>
int main() {
std::string str = "This is a string";
std::cout << str.starts_with("name");
}
但是智能感知會報錯
"std::__cxx11::basic_string<char, std::char_traits, std::allocator>" 沒有成員 "starts_with" C/C (135) [6,9]
它仍然可以構建并產生正確的結果。它也可以在頭檔案中找到實作。但是宏__cplusplus定義為201703L
我-std=c 20在構建時已經添加了命令,為什么會發生這種情況?
編譯器:msys2編譯的minGW 11.2
uj5u.com熱心網友回復:
假設您使用的是Microsoft 的 C/C 擴展,則必須將擴展配置為使用 C 20 標準進行智能感知。
最簡單的方法是將這一行添加"C_Cpp.default.cppStandard": "c 20"到settings.json檔案中。您還可以在 GUI 中的名稱“Cpp Standard”下找到該設定。c 20從其下拉串列中進行選擇將獲得相同的結果。
請注意,此設定默認設定為全域用戶默認值。您可以通過在設定 GUI 中選擇作業區選項卡并將 Cpp 標準下拉選單更改為c 20.
至于為什么添加 -std=c 20 標志不起作用:-std=c 20只是告訴您的編譯器使用哪個標準來構建您的代碼。'Intellisense' 不會收到這個標志,因為它是一個獨立于編譯器的工具,因此不需要支持編譯器支持的所有標準。盡管 Intellisense 工具通常支持盡可能最新的標準,但它的支持甚至可能更少。因此,Intellisense 的語言標準必須與編譯器分開配置(在這種情況下)。
最后注意:更改設定后,請嘗試關閉并重新打開 VS Code。根據我的經驗,更改語言標準設定可能會導致一些奇怪的事情發生。關閉并重新打開 VS Code 似乎可以確保設定更改完全生效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/393669.html
