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 特性

vscode自动补全c++

VSCode使用新体验

Path intellisense不带后缀解决方案(VSCode插件)

Intellisense 在 VSCode 中不起作用 - OmniSharp 错误

vscode 中用于 tensorflowjs 的 Intellisense