我打印了
__cplusplus
宏的值,发现我的文件是在 Visual Studio Code 中使用 C++98 执行的。我正在使用 CodeRunner 扩展。
如何将其更改为 C++17?
此外,请确保您的调试器使用相同的版本。在task.json中,
--std
之后的行定义了版本。
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe build active file",
"command": "C:\\msys64\\mingw64\\bin\\g++.exe",
"args": [
"--std",
"c++20",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
如果您在不支持 CMake 的情况下使用 cpptools 扩展,则使用
C_Cpp.default.cppStandard
设置,或 c_cpp_properties.json
中特定配置的相应属性。请注意,这仅适用于 IntelliSense,不会影响实际构建所使用的语言标准。
如果您使用来自 CMake 工具扩展 (
"configurationProvider": "ms-vscode.cmake-tools"
) 的 CMake 支持,请以最适合您的项目的方式调整您的 CMake 配置(例如 target_compile_features
、CMAKE_CXX_STANDARD
) ).
此外,如果您使用构建任务来进行编译(对于没有 CMake 工具设置的 cpptools,IntelliSense 和构建配置是分开的),请确保添加相应的编译标志以使用该 C++ 标准(另请参阅 我的这篇文章)。不使用相同的语言标准进行构建和 IntelliSense 会导致混乱、错误和可能的错误。
如果您使用 clangd 扩展,则会从编译命令数据库(
compile_commands.json
文件)中删除,您可以使用 CMAKE_EXPORT_COMPILE_COMMANDS
从 CMake 自动获取该数据库(另请参阅 我的这篇文章) .
如果您使用 VS Code 的 Code Runner 扩展(我不推荐这样做),请参阅 如何更改 VS Code 的 Code Runner 扩展使用的 C++ 标准?(编辑工作区 .vscode/settings.json 的
code-runner.executorMap
设置)。