【问题标题】:Know which version of c++ is running on Visual Studio了解 Visual Studio 上运行的是哪个版本的 c++
【发布时间】:2021-02-02 17:46:38
【问题描述】:

我正在尝试在 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),但应用程序可以正常工作。这个“异常”是如何解释的?我如何知道/决定使用哪个标准?

【问题讨论】:

  • 不要使用==。您将错过介于两者之间的任何版本。使用&gt;=。对于 Visual Studio,您可能需要测试 _MSC_VER。例如,我的 C++11 测试如下所示:#if __cplusplus &gt;= 201103L || (defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1900)
  • 更多关于潜在问题的信息在这里:stackoverflow.com/questions/14131454/…
  • 好的,非常感谢您的回复和分享链接
  • 请注意,根据 MSVS 的版本,您可能无法获得 C++11。例如,在 MSVS 2019 中,您可以使用的最低版本是 C++14。

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


【解决方案1】:

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

【讨论】:

  • 您应该使用 /Zc:__cplusplus 开关进行编译,以将版本宏更改为正确的值。 Yuk(不是对你发脾气,而是 yuk)。跨度>
  • @PaulSanders Microsoft 开发产品尤其充满了工件和错误,这些产品和错误在第一次完成时没有正确或不符合标准,然后由于某些向后兼容的承诺而停滞不前。跨度>
猜你喜欢
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 2012-08-30
  • 2015-08-27
  • 2015-07-03
  • 1970-01-01
  • 2021-04-05
相关资源
最近更新 更多