VSCode C++ Intellisense 无法辨别 C++20 特性
Posted
技术标签:
【中文标题】VSCode C++ Intellisense 无法辨别 C++20 特性【英文标题】:VSCode C++ Intellisense can't discern C++20 features 【发布时间】:2022-01-24 04:33:10 【问题描述】:我尝试运行类似的代码
#include <string>
#include <iostream>
int main()
std::string str = "This is a string";
std::cout << str.starts_with("name");
但是智能感知会报错
"std::__cxx11::basic_string
" 没有成员 "starts_with" C/C++(135) [6,9]
它仍然可以构建并产生正确的结果。
它也可以在头文件中找到实现。
但是宏__cplusplus
被定义为201703L
我已经在构建时添加了一个命令-std=c++20
,为什么会这样?
编译器:msys2编译的minGW 11.2
【问题讨论】:
你要填写c_cpp_properties.json
@rioV8 我已经加了,是 "cppStandard": "c++20"
【参考方案1】:
假设您使用的是Microsoft's C/C++ extension,您必须将扩展配置为使用 C++ 20 标准进行智能感知。
最简单的方法是将"C_Cpp.default.cppStandard": "c++20"
行添加到您的settings.json 文件中。您还可以在 GUI 中以 "Cpp Standard" 的名称找到该设置。从其下拉列表中选择c++20
将获得相同的结果。
请注意,默认情况下,此设置设置为全局用户默认值。您可以通过在设置 GUI 中选择 Workspace 选项卡并将 Cpp Standard 下拉菜单更改为 c++20
,为每个工作区配置它。
至于为什么添加 -std=c++20 标志不起作用:-std=c++20
只是告诉您的编译器使用哪个标准来构建您的代码。 'Intellisense' 没有收到此标志,因为它是独立于编译器的工具,因此不需要支持编译器支持的所有标准。尽管 Intellisense 工具通常支持尽可能最新的标准,但它支持的可能更少。因此,Intellisense 的语言标准必须与编译器分开配置(在这种情况下)。
最后说明:更改设置后,请尝试关闭并重新打开 VS Code。根据我的经验,更改语言标准设置可能会导致一些奇怪的事情发生。关闭并重新打开 VS Code 似乎可以确保设置更改完全生效。
【讨论】:
重新加载窗口比关闭和打开要快一点。 没错,这绝对是一个更好的选择。忘记了以上是关于VSCode C++ Intellisense 无法辨别 C++20 特性的主要内容,如果未能解决你的问题,请参考以下文章
VSCode C++ Intellisense 无法辨别 C++20 特性
Path intellisense不带后缀解决方案(VSCode插件)