关于visual Studio中C++版本版本的问题

在MSVC中,编译器通过_MSVC_LANG宏来判断C++的版本号,其他编译器通过__cplusplus 宏来判断。

  所以可以通过使用:cout<<_MSVC_LANG<<endl; 来获取当前Visual Studio使用的版本号,be careful, _MSVC_LANG 是不等于 __cplusplus的,所以有些时候引入某些头文件,再使用时,会报错,究其原因,还是C++版本的问题。

  如引入:

#include <filesystem> namespace fs = std::filesystem;

  会报错: namespace 没有成员 "filesystem"

  进入但 fielsystem 是有 filesystem namespace 的定义的,但是是有条件的,即 在# define _HAS_CXX17 1 时,该命名空间才存在,所以进一步搜索看_HAS_CXX17在何时才定义为 1, 一般不建议自己在程序中定义 # define _HAS_CXX17 1,因为_HAS_CXX17 为内部变量,即便你自己定义了,会造成宏重定义的问题。找到 _HAS_CXX17定义的头文件,发现:

    #if _STL_LANG > 201703L
        #define _HAS_CXX17 1
        #define _HAS_CXX20 1
    #elif _STL_LANG > 201402L
        #define _HAS_CXX17 1
        #define _HAS_CXX20 0
    #else // _STL_LANG <= 201402L
        #define _HAS_CXX17 0
        #define _HAS_CXX20 0

  发现其定义为 0 或 1 取决于 _STL_LANG 变量的选择,再搜寻 _STL_LANG 的定义:

#if defined(_MSVC_LANG)
        #define _STL_LANG _MSVC_LANG
    #else // ^^^ use _MSVC_LANG / use __cplusplus vvv
        #define _STL_LANG __cplusplus
    #endif // ^^^ use __cplusplus ^^^

  发现其又与变量 _MSVC_LANG 有关,而_MSVC_LANG为内部变量,无相关定义,网上查阅相关资料显示,其与Visual Studio中设置的参数有关:

右击项目->属性->C/C++->语言->C++ 语言标准 。 当设置为默认值(应该即为 IOS2014 C++ 14 标准)时,_MSVC_LANG值为 201402L,当其值设置为:IOS2014 C++ 14 标准时,_MSVC_LANG值为 201703L。修改配置后,程序恢复正常。

原文地址:https://www.cnblogs.com/justaname/p/12006155.html

时间: 2024-11-06 11:39:10

关于visual Studio中C++版本版本的问题的相关文章

【转】详解在visual studio中使用git版本系统(图文)

http://blog.csdn.net/wojilu/article/details/6976230 很多人已经在使用git(或正在转移到git上),在github.com上,也看到不少国内同学的开源项目,非常不错.但相关教程似乎不多,所以趁着我自己的开源项目源码托管(https://github.com/wojilu/wojilu),写了一篇,算是抛砖引玉吧. 这篇教程的预期,是希望没有任何版本使用基础的新手也可以掌握,所以细节较多,不当之处,欢迎指正. 第一部分: 安装 git 开发工具

详解在Visual Studio中使用git版本系统[转]

这篇教程的预期,是希望没有任何版本使用基础的新手也可以掌握,所以细节较多,不当之处,欢迎指正. 一 .安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了,图形化工具(无论是 git extentions ,还是TortoiseGit),都只不过是命令行的封装.就功能而言,他们能做的,命令行全部可以做到;但命令行能做的,他们不一定可以做到.命令行更 加原生.本色,跨越平台,以一当十.建议熟悉 git 命令行工具. 但图形化工具也有自己的优点,就是直观

转载:详解在visual studio中使用git版本系统(图文)

很多人已经在使用git(或正在转移到git上),在github.com上,也看到不少国内同学的开源项目,非常不错.但相关教程似乎不多,所以趁着我自己的开源项目源码托管(https://github.com/wojilu/wojilu),写了一篇,算是抛砖引玉吧. 这篇教程的预期,是希望没有任何版本使用基础的新手也可以掌握,所以细节较多,不当之处,欢迎指正. http://blog.csdn.net/leichelle/article/details/8002636

如何在Visual Studio中选择C++和C#的编译器版本

博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何在Visual Studio中选择C++和C#的编译器版本.

安装sql server 2008 R2,提示错误:此计算机上安装了 Microsoft Visual Studio 2008 的早期版本。请在安装 SQL Server 2008 前将 Microsoft Visual Studio 2008 升级到 SP1。

在安装工具的时候先安装了VS2008 安装了VS自带的SQL工具, 在等我安装SQL server 2008 r2 时候就出现了 “Microsoft Visual Studio 2008 的早期版本”的问题,在网上找到的解决方案 解决方法如下: ------适用于32位的系统(本人位64位系统这个没事看别人评论都成功了) 安装sql server 2008 R2,安装过程中提示错误:此计算机上安装了 Microsoft Visual Studio 2008 的早期版本. 有人说是要先安装sql

Visual Studio 2012 与此版本的 Windows 不兼容 解决

警告: [Window Title] 程序兼容性助手[Main Instruction] 此程序存在已知的兼容性问题[Expanded Information] Visual Studio 2012 与此版本的 Windows 不兼容.有关详细信息,请联系 Microsoft. 下载更新包安装:http://www.microsoft.com/zh-CN/download/details.aspx?id=36020

SQL SERVER安装提示“安装了 Microsoft Visual Studio 2008 的早期版本

工作共遇到的问题记录: 安装Sql Server 2008 R2时提示错误:“此计算机上安装了 Microsoft Visual Studio 2008 的早期版本.请在安装 SQL Server 2008 前将 Microsoft Visual Studio 2008 升级到 SP1”. 解决方法: 1.单击开始菜单的“运行...”输入“regedit”,打开注册表. 2.重新命名HKEYLocalMachine/Software/Microsoft/DevDiv,安装好后再将其改回. 转:h

安装了SQL2005再安装SQL 2008R2,提示此计算机上安装了 Microsoft Visual Studio 2008 的早期版本和检查是否安装了 SQL Server 2005 Express 工具的解决方案

工作电脑上安装了SQL 2005, 但是客户电脑上安装的是SQL 2008R2,有时候连接他们的库调试没法连接,很不方便.然后又安装了个SQL2008 R2,期间遇到这两个问题,网上搜索了一下收到了解决方案,不用安装VS 2008 SP1,不用卸载SQL Server 2005 Express 工具,只需要修改注册表即可. 提示错误:此计算机上安装了 Microsoft Visual Studio 2008 的早期版本.请在安装 SQL Server 2008 前将 VS2008 升级到 SP1

sqlserver安装失败,此计算机上安装了 Microsoft Visual Studio 2008 的早期版本解决方法

安装sql server 2008 management,提示错误:此计算机上安装了 Microsoft Visual Studio 2008 的早期版本.请在安装 SQL Server 2008 前将 VS2008 升级到 SP1. 解决方法: 修改注册表. 运行注册表,将HKEYLocalMachine/Software/Microsoft/DevDiv 重命名就可以了. 安装好后再将其改回原样. 一切ok 原文地址:http://blog.csdn.net/eric88/article/d