此声明没有存储类或类型说明符 - 编译器未检测 consteval

问题描述 投票:0回答:1

我有一个问题,为什么我会遇到这两个问题,这个声明没有存储类或类型说明符,并且需要一个“;” 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 不是确认的标准。

c++ declaration cl.exe consteval specifier
1个回答
0
投票

您遇到的问题可能与您使用的编译器版本有关。 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 或尝试不同的编译器可能有助于确定根本原因。

© www.soinside.com 2019 - 2024. All rights reserved.