我有一个问题,为什么我会遇到这两个问题,这个声明没有存储类或类型说明符,并且需要一个“;” ln 3 第 11 栏,代码:Main.cpp:
#include <iostream>
consteval int get_value(){
return 3;
}
int main(){
constexpr int value = get_value();
std::cout << "value : " << value << std::endl;
return 0;
}
出于某种原因,对于此代码,我的编译器未将 consteval 检测为有效的 int。
Tasks.Json 文件
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "Build with MSVC",
"command": "cl.exe",
"args": [
"/Zi",
"/std:c++20",
"/EHsc",
"/Fe:",
"${fileDirname}\\rooster.exe",
"${workspaceFolder}\\*.cpp"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$msCompile"
],
"group": "build",
"detail": "compiler: cl.exe"
}
]
}
c_cppp_properties.json
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.19041.0",
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe",
"cStandard": "c17",
"cppStandard": "c++20",
"intelliSenseMode": "windows-msvc-x64"
}
],
"version": 4
}
我正在使用 cl.exe 在 Visual Studio 代码上编译和运行任务。我的编译器 cl.exe 版本是 Microsoft (R) C/C++ Optimizing Compiler Version 19.41.34120 for x86。非常感谢任何解决方案,谢谢!
我尝试将 cpp 标准从 c++latest 更改为 c++20,因为我认为 consteval 没有被检测到,因为 c++20 不是确认的标准。
您遇到的问题可能与您使用的编译器版本有关。 consteval 关键字是在 C++20 中引入的,但并非所有编译器都完全支持该标准的每个功能,即使它们声称支持 C++20
编译器版本兼容性:确保您使用的 MSVC 编译器版本完全支持 consteval。即使您使用的是 C++20 标准,某些旧版本的 MSVC 可能无法完全实现所有 C++20 功能。考虑将您的 Visual Studio 安装更新到最新版本。
您提到您在tasks.json 中使用/std:c++20。这是正确的,但如果您的编译器不完全支持 consteval,您可能会遇到问题。尝试使用 /std:c++latest 切换到最新的预览标准,看看是否有任何区别。
更新或重新安装编译器如果更新 Visual Studio 版本没有帮助,您可以尝试重新安装 MSVC 编译器或切换到其他编译器(例如 GCC 或 Clang),看看问题是否仍然存在。尝试将 MSVC 工具链更新到最新版本,看看问题是否仍然存在。如果是这样,切换到 /std:c++latest 或尝试不同的编译器可能有助于确定根本原因。