iEc*_*-42 12 c++ visual-studio-code c++20
我尝试运行类似的代码
#include <string>
#include <iostream>
int main() {
std::string str = "This is a string";
std::cout << str.starts_with("name");
}
Run Code Online (Sandbox Code Playgroud)
但是intellisense会报错
“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
小智 15
假设您正在使用Microsoft 的 C/C++ 扩展,则必须配置该扩展以使用 C++ 20 标准进行智能感知。
最简单的方法是将行添加"C_Cpp.default.cppStandard": "c++20"到settings.json文件中。您还可以在 GUI 中的“Cpp Standard”名称下找到该设置。c++20从其下拉列表中选择将获得相同的结果。
请注意,此设置默认设置为全局用户默认值。您可以通过在设置 GUI 中选择“工作c++20空间”选项卡并将 Cpp 标准下拉列表更改为 来按工作空间配置它。
至于为什么添加 -std=c++20 标志不起作用:-std=c++20只是告诉编译器使用哪个标准来构建代码。“Intellisense”不会收到此标志,因为它是与编译器分开的工具,因此不需要支持编译器支持的所有标准。尽管 Intellisense 工具通常支持尽可能最新的标准,但它的支持可能较少。因此,Intellisense 的语言标准必须与编译器分开配置(在本例中)。
最后注意:更改设置后,尝试关闭并重新打开 VS Code。根据我的经验,更改语言标准设置可能会导致一些奇怪的情况发生。关闭并重新打开 VS Code 似乎可以确保设置更改完全生效。
| 归档时间: |
|
| 查看次数: |
6243 次 |
| 最近记录: |