VSCode C++ Intellisense 无法识别 C++20 功能
VSCode C++ Intellisense can't discern C++20 features
我尝试 运行 像
这样的代码
#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>" has no member "starts_with" C/C++(135) [6,9]
而且它仍然可以构建并产生正确的结果。
它也可以在头文件中找到实现。
但是宏 __cplusplus
被定义为 201703L
我在构建时已经添加了一个命令-std=c++20
,为什么会这样?
编译器:msys2编译的minGW 11.2
假设您正在使用 Microsoft's C/C++ extension,您必须将扩展配置为使用 C++ 20 智能感知标准。
最简单的方法是将 "C_Cpp.default.cppStandard": "c++20"
行添加到 settings.json 文件中。您还可以在名称为 "Cpp Standard" 的 GUI 中找到该设置。从下拉列表中选择 c++20
将获得相同的结果。
请注意,此设置默认设置为全局用户默认值。您可以通过在设置 GUI 中选择 Workspace 选项卡并将 Cpp Standard 下拉菜单更改为 c++20
.
来为每个工作空间配置它
至于为什么添加 -std=c++20 标志不起作用:-std=c++20
只是告诉您的编译器使用哪个标准来构建您的代码。 'Intellisense' 不会收到此标志,因为它是独立于编译器的工具,因此不需要支持编译器支持的所有标准。它甚至可能支持更少,尽管 Intellisense 工具通常支持尽可能最新的标准。因此,Intellisense 的语言标准必须与编译器分开配置(在本例中)。
最后说明:更改设置后,尝试关闭并重新打开 VS Code。根据我的经验,更改语言标准设置可能会导致一些奇怪的事情发生。关闭并重新打开 VS Code 似乎可以确保设置更改完全生效。
我尝试 运行 像
这样的代码#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>" has no member "starts_with" C/C++(135) [6,9]
而且它仍然可以构建并产生正确的结果。
它也可以在头文件中找到实现。
但是宏 __cplusplus
被定义为 201703L
我在构建时已经添加了一个命令-std=c++20
,为什么会这样?
编译器:msys2编译的minGW 11.2
假设您正在使用 Microsoft's C/C++ extension,您必须将扩展配置为使用 C++ 20 智能感知标准。
最简单的方法是将 "C_Cpp.default.cppStandard": "c++20"
行添加到 settings.json 文件中。您还可以在名称为 "Cpp Standard" 的 GUI 中找到该设置。从下拉列表中选择 c++20
将获得相同的结果。
请注意,此设置默认设置为全局用户默认值。您可以通过在设置 GUI 中选择 Workspace 选项卡并将 Cpp Standard 下拉菜单更改为 c++20
.
至于为什么添加 -std=c++20 标志不起作用:-std=c++20
只是告诉您的编译器使用哪个标准来构建您的代码。 'Intellisense' 不会收到此标志,因为它是独立于编译器的工具,因此不需要支持编译器支持的所有标准。它甚至可能支持更少,尽管 Intellisense 工具通常支持尽可能最新的标准。因此,Intellisense 的语言标准必须与编译器分开配置(在本例中)。
最后说明:更改设置后,尝试关闭并重新打开 VS Code。根据我的经验,更改语言标准设置可能会导致一些奇怪的事情发生。关闭并重新打开 VS Code 似乎可以确保设置更改完全生效。