c++ - 知道在 Visual Studio 上运行的是哪个版本的 c++

标签 c++ visual-studio c++11 cmake

我正在尝试在 Visual Studio 上为我的项目设置 c++11,并找出编译器默认使用的版本,我使用了以下代码:

#include <iostream>

int main(){
        #if __cplusplus==201402L
        std::cout << "C++14" << std::endl;
        #elif __cplusplus==201103L
        std::cout << "C++11" << std::endl;
        #elif __cplusplus==199711L
        std::cout << "C++" << std::endl;
        #elif __cplusplus==201703L
        std::cout << "C++17" << std::endl;
        #elif __cplusplus==1
        std::cout << "C+" << std::endl;
        #endif

        int* i = nullptr;

        return 0;
}
输出 c++ (98) 我试图通过 CMakeLists 强制编译器使用 c++11,如下所示:
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
输出总是 C++ (98),所以我加了
int* i = nullptr;
令人惊讶的是,输出仍然是 c++ (98),但应用程序可以正常工作。这个“异常”是如何解释的,我如何知道/决定使用哪个标准?

最佳答案

根据这个问题:Visual Studio 2012 __cplusplus and C++ 11 ,由@paddy 提供,这是 MSVC 的一个已知错误,因为版本宏设置为 C++98。您应该使用 /Zc:__cplusplus 进行编译switch 以将版本宏更改为正确的值。

关于c++ - 知道在 Visual Studio 上运行的是哪个版本的 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64435998/

相关文章:

c# - C++/CLI 使用抽象方法从 native C++ 类继承并将其公开给 C#

visual-studio - 无法从 Visual Studio 部署 Web 应用程序

从 VS 6 到 VS 2013 的 C++ IDE 迁移

c++ - 共享指针仅通过 std::shared_ptr 初始化。 std::make_shared 构造函数不工作

C#-Like Delegates in C++

c++ - 如何编译同时使用 windows.h 和 google glog (glog/logging.h) 的 C++ 程序?

c++ - 使用 sse intrinsics 的 (A)RGB32 图像最快 50% 缩放

c++ - 什么意思::在函数调用的前面

c# - Visual Studio 不断为 Strings.resx 生成多个 Strings#.Designer.cs 文件

c++ - 将指向 vector 的指针推回然后修改其值会影响插入的值。我应该怎么做呢?