首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

标识c++的版本(e.xc++11、c++14)从对象或库文件中

提取版本信息的方法是使用预处理指令。在C++中,可以使用预定义的宏__cplusplus来获取编译器所支持的C++版本。

以下是一些常见的C++版本及其对应的__cplusplus宏值:

  • C++98: __cplusplus的值为199711L
  • C++03: __cplusplus的值为199711L
  • C++11: __cplusplus的值为201103L
  • C++14: __cplusplus的值为201402L
  • C++17: __cplusplus的值为201703L
  • C++20: __cplusplus的值为202002L

通过检查__cplusplus的值,可以确定编译器所支持的C++版本。

以下是一个示例代码,演示如何提取C++版本信息:

代码语言:txt
复制
#include <iostream>

int main() {
    if (__cplusplus == 199711L) {
        std::cout << "C++98 or C++03" << std::endl;
    } else if (__cplusplus == 201103L) {
        std::cout << "C++11" << std::endl;
    } else if (__cplusplus == 201402L) {
        std::cout << "C++14" << std::endl;
    } else if (__cplusplus == 201703L) {
        std::cout << "C++17" << std::endl;
    } else if (__cplusplus == 202002L) {
        std::cout << "C++20" << std::endl;
    } else {
        std::cout << "Unknown C++ version" << std::endl;
    }

    return 0;
}

请注意,不同的编译器可能会对__cplusplus的值有所不同,因此在使用时应该参考特定编译器的文档。此外,C++标准库中也提供了__cplusplus的值的定义,可以使用<cstddef>头文件中的__cplusplus宏来获取版本信息。

相关搜索:Git LFS -如何从git存储库中删除旧版本的文件?如何从flutter中的dart混淆中排除文件、类、库或包?有没有办法将CDN库从JSFiddle中的文件复制或导出到HTML或ClipBoard中尝试在不使用C++中的外部库或模块的情况下读写JSON文件如何从Google Colab的Github存储库中克隆(或仅使用)单个文件?如何使用boto3库从基于s3版本的s3中获取对象?如何在使用文件室从ChildActivity单击按钮时从RecyclerView中删除从数据库加载到MainActivity中的对象列表如何使用Restassured库从请求或响应对象获取传递到POST请求中的body(json)的内容?VBA Excel从关闭的文件中获取工作簿对象或通过工作表索引引用Excel SQL表如何从可执行文件中调用动态链接库的虚函数?C++ VS2019从SQL Server数据库中保存的二进制文件中检索C#对象有没有可能在不反汇编或使用grep或字符串的情况下从ELF镜像文件中获得内核版本?project.assets.json的对象模型是什么?我们可以使用什么库从文件中解析它?我们可以在C++中创建std::cin以外的输入流对象吗?尤其是当库创建的库由于eofbit或故障位而不再有效时在C++11 (或更高版本)中,从字节数组反序列化对象的无未定义行为方式是什么?C++:如何在使用带有ifstream对象的getline()从文件中读取一行时跳过第一个空格?rust ...why将函数从rs文件导入到库中?-无法解析:使用了未声明的类型或模块‘client`从MySQL数据库中提取具有特殊字符的所有文件,但我不想对查询中的所有特殊字符使用“或”条件如何从特定存储库下载源代码,其中仅包含在特定提交过程中更改或添加的文件?触发器存在,但未显示在服务器对象、数据库触发器或表下的触发器文件夹中
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Git删除暂存区版本文件

打开你项目文件夹,除了隐藏.git文件夹,其他项目文件位于地方便是工作区,工作区文件需要添加到Git暂存区(git add),随后再提交到Git版本(git commit)。...添加到了版本之后,再对文件进行修改,那么文件状态会变为unstaged状态。 简单认识了Git工作流程,接下来便可以看看如何删除错误添加到暂存区版本库里文件了!...错误提交到了版本,此时无论工作区、暂存区,还是版本,这三者内容都是一样,所以在这种情况下,只是删除了工作区和暂存区文件,下一次用该版本回滚那个误添加文件还会重新生成。...如果你是在提交了后,对工作区代码做了修改,并且想保留这些修改,那么可以使用git reset --mixed 版本ID,注意这个版本ID应该不是你刚刚提交版本ID,而是刚刚提交版本上一个版本...为什么不使用--soft呢,因为它只是恢复了版本,暂存区仍然存在你错误提交文件索引,还需要进一步使用上一节删除错误添加到暂存区文件,详细见上文。 ?

3.8K30
  • Modern C++,学炸了!!

    C++ 语言特性和 stl ,它们包括但不限于: 指针和引用概念 指针与内存关系 程序编译过程,静态链接和动态链接 static、const、#define用法和区别 C和C++区别 内存栈和堆分配...所谓现代 C++(即所谓 Modern C++)指的是 C++11 及之后版本,目前最新版本是 C++20,这期间一共有 C++11、C++14、C++17 三个版本。...4.2 C++14 改动 C++14 是一个变动比较小版本,主要是对 C++11 新特性做了一些完善或者修正一些小错误。...对象,却没有提供相应 std::make_unique() 方法创建一个 std::unique_ptr 对象,这个方法直到 C++14 才被添加进来。...程序一些功能(如文件操作、协程等)需要直接调用操作系统 API ,而不像其他语言自带 SDK,这样对于要求多平台运行程序,必须使用宏定义分别编写一套。

    3.1K10

    C++发展概述

    C++最初C with class,经历了C++98、C++ 03、C++ 11、C++ 14再到C++17多次标准化改造,功能得到了极大丰富,已经演变为一门集面向过程、面向对象、函数式、泛型和元编程等多种编程范式复杂编程语言...第一个版本C++,因其面向对象思想使得编程变得简单,并且又保持了C语言运行效率,在推出一段时间内,得到了快速发展,占据了编程语言界半壁江山。...1985年到1998年,C++最初C with Classes新增了很多其他特性,比如异常处理、模板、标准模板(STL)、运行时异常处理(RTTI)与名字空间(Namespace)等。...1998年到2003年,是C++标准C++98到C++03迭代期,期间C++扩增了很多额外特性,比如以Boost MPL(Boost Metaprogramming Library)与Loki等为代表模板元编程出现...C++14 是对 C++11重要补充和优化,是C++发展历程一个小型版本,虽然新增内容较少,但是仍然为用户“带来了极大方便”,为实现使C++“对新手更为友好”这一目标作出努力。

    70310

    C++雾中风景12:聊聊C++Mutex,以及拯救生产力Boost

    1.C++多线程编程困扰 C++11开始在标准之中引入了线程来进行多线程编程,在之前版本需要依托操作系统本身提供线程来进行多线程编程。...共享互斥量 由上述表格可见,C++14之后版本才正式支持共享互斥量,也就是实现读写锁结构。...lock()try_lock()开始,到unlock()为止占有mutex对象。...shared_lock C++14 共享互斥量管理 scope_lock C++17 多互斥量避免死锁管理 创建互斥量管理对象时,它试图给给定mutex加锁。...当程序离开互斥量管理对象作用域时,互斥量管理对象会析构并且并释放mutex。所以我们则不需要担心程序跳出产生异常引发死锁了。 对于需要加锁代码段,可以通过{}括起来形成一个作用域。

    95121

    C++雾中风景12:聊聊C++Mutex,以及拯救生产力Boost

    1.C++多线程编程困扰 C++11开始在标准之中引入了线程来进行多线程编程,在之前版本需要依托操作系统本身提供线程来进行多线程编程。...共享互斥量 由上述表格可见,C++14之后版本才正式支持共享互斥量,也就是实现读写锁结构。...lock()try_lock()开始,到unlock()为止占有mutex对象。...shared_lock C++14 共享互斥量管理 scope_lock C++17 多互斥量避免死锁管理 创建互斥量管理对象时,它试图给给定mutex加锁。...当程序离开互斥量管理对象作用域时,互斥量管理对象会析构并且并释放mutex。所以我们则不需要担心程序跳出产生异常引发死锁了。 对于需要加锁代码段,可以通过{}括起来形成一个作用域。

    1.2K41

    【gtest】 C++ 测试框架之使用 gtest 编写单元测试

    3.14) project(my_project) # 设置 C++ 标准为 C++14 set(CMAKE_CXX_STANDARD 14) # 强制要求编译器支持所选 C++ 标准 set(CMAKE_CXX_STANDARD_REQUIRED...你可以通过对其行为进行断言来测试一个类函数。当一个断言失败时,gtest 会打印断言文件和行号位置,以及一个失败消息。你还可以提供一个自定义失败消息,它将附加到 gtest 消息。...两个名称都必须是有效 C++ 标识符,并且不能包含下划线【测试全名=其所属测试套件+其单独名称组成。...如果你发现自己在编写两个更多操作相似数据测试,可以使用测试夹具。这样可以为多个不同测试重复使用相同对象配置。 创建夹具步骤: testing::Test 派生一个类。...在类声明你需要使用任何对象。 如果需要,编写一个默认构造函数 SetUp() 函数,为每个测试准备对象

    1.8K10

    C++C++对C语言关系,拓展及命名空间使用

    C++语言是在C语言基础上,添加了面向对象,模板等现代程序设计语言特性而发展起来。两者无论是语法规则上,还是运算符数量和使用上,都非常相似,所以我们常常将这两门语言统称为“C/C++”。...不依赖任何特定平台API。...随着可重用代码增加,不同代码同名标识符之间冲突会显著增加。解决方法是将不同代码放置在不同命名空间中。...C++标准所有标识符如iostream类和vector类都是定义在这个std命名空间中。...如果需要使用这些标准功能,需要添加using声明使用std前缀来限定名称,比如使用std::cout输出。

    14710

    Effective Modern C++翻译(1):序言

    当我提到C++98时候,我指只是C++语言这个版本,当我提到C++11时候,我指的是C++11和C++14,因为C++14是C++11一个有效超集,当我写C++14时候,我明确指的是C+...+14,如果我只是简单提到C++,那么它是属于所有语言版本,因此,我可能会说C++是十分重视效率(这里指的是所有的C++版本),C++98缺少对并发性支持(指仅仅是C++98),C++11支持了...C++11最流行特性很可能是移动语义,移动语义基础是表达式判断是左值右值,这是因为右值暗示了对象有资格使用移动运算,而左值通常不能。...在概念上(尽管并不总是在实践)右值相对应于函数返回匿名临时变量,而左值相对应于你可以引用对象,既可以通过指针,也可以通过引用。...当一个对象以另一个同样类型对象初始化时候,这个新对象被认为原对象一个拷贝,即使这个拷贝是经由移动构造创建,令人遗憾是,C++没有任何一个技术可以区分一个对象是经由拷贝构造创建,还是经由移动构造创建

    1.2K90

    关于编译重要概念总结

    将函数相应代码组合到目标文件,汇编文件和系统文件链接起来,生成在特定平台可执行程序。 最早操作系统,是没有链接器,由加载器loader进行工作,所以ld命名由此而来。...C++语言版本 C++是一门以C为基础发展而来一门面向对象高级程序设计语言,1983年由Bjarne Stroustrup教授在贝尔实验室创立开始至今,已有30多个年头。...C++最初C with class,经历了C++98、C++ 03、C++ 11、C++ 14、C++17再到C++ 20多次标准化改造,功能得到了极大丰富,已经演变为一门集面向过程、面向对象、...C++ 14 C++14引入了二进制文字常量、将类型推导Lambda函数扩展到所有函数、变量模板以及数字分位符等。进一步补充优化C++11。...参考文章:C++版本发展史_c++历史版本_蓬莱道人博客-CSDN博客 Makefile 一个工程文件不计其数,其按类型、功能、模块分别放在若干个目录,makefile定义了一系列规则来指定哪些文件需要先编译

    95020

    Effective Modern C++翻译(4)-条款3:了解decltype

    // 正确 authenticateUser(); return c[i]; // c[i]推导返回类型 } 但是哪一种C++类型推导规则将会被使用呢...赋给一个int类型右值,这在C++是禁止,所以上面的代码无法通过编译。...C++规则制定者(The guardians of C++),预料到了在某种情况下类型推导需要使用decltype类型推导规则,所以在C++14出现了decltype(auto)说明符,这个刚开始看起来可能会有些矛盾...利用传值方式传递一个未知对象,通常需要忍受不必要拷贝,对象被分割问题(见条款17),还有来自同事嘲笑,但是根据标准例子(例如 std::string,std::vector和std::deque...C++14提供了decltype(auto)支持,比如auto,初始化式推导类型,但使用decltype推导规则。

    80090

    Modern c++快速浅析

    auto推导具有将大括号初始物转换为std::initializer_listT类型数据能力,而模板类型推导不具备这样能力 C++14 auto a{ 1, 2, 3 };...decltype能够表达式推断出要定义变量类型 decltype(a + b) i; //假设a是int而b是double,那么i类型就是表达式(a + b)类型,即double •当decltype...1 : base * pow(base, exp - 1)); } 在C++14,对constexpr修饰函数做了进一步拓展,C++14constexpr函数不再是只能单纯包含一条return...) 而C++按引用捕获并不能延长对象生命周期,且按引用捕获会导致lambda表达式包含了对局部对象引用,这很可能会导致空悬引用 std::function callBack;...) 假设有一个不可拷贝对象需要被捕获进Lambda表达式,那么C++14就可以这么做 std::unique_ptr uniquePtr = std::make_unique(

    18110

    NumPyC++替代NumCpp使用教程

    NumPy提供了很多开箱即用函数,用处非常大,所以写C++时候,让人无比怀念,要是有一个替代版本,就太好了。...最近搜索发现, NumCpp 这是我想要,而且因为是 Header-only,因此使用时不需要编译,直接添加到头文件包含目录即可,使用很方便。...zip unzip boost_1_75_0.zip mv boost_1_75_0/boost includes/NumCpp 这里我们创建了一个includes目录,用来存放NumCpp和Boost文件...接下来就是编译C++代码,这里以Linux下g++编译为例说明,需要注意有2个点: NumCpp只支持C++14以及以上版本,所以编译时需要加--std=c++14 需要将NumCpp所在目录添加到头文件包含指令...-I里 具体如下: g++ test_num_cpp.cpp --std=c++14 -Iincludes/ 编译完后运行生成可执行文件: .

    58610

    JDK19都出来了~是时候梳理清楚JDK各个版本特性了【JDK16特性讲解】

    广义上讲,这意味着它们对标识对类行为不重要不可变对象进行编码,并且它们不提供实例创建机制,例如公共构造函数,保证每次调用具有唯一标识。...此 JEP 目的是正式允许 JDK C++ 源代码更改以利用 C++14 语言功能,并提供有关哪些功能可以在 HotSpot 代码中使用具体指导。...(早期版本会生成配置时警告,可能会也可能不起作用。)对于 Visual Studio 2017,默认 C++ 标准是 C++14。/std:c++14 应添加该选项。将完全放弃对旧版本支持。...其他语言,例如Rust,提供了 C/C++文件机械地派生本机包装器工具。...可以各种来源创建内存段,例如本机内存缓冲区、内存映射文件、Java 数组和字节缓冲区(直接基于堆)。

    1.6K50

    机器人CPP编程基础-03变量类型Variables Types

    std是标准缩写,表示标准。这样,我们就可以直接使用标准名字,而不用在每个名字前都写std::。 main(): 程序主函数,所有C++程序都从这里开始执行。...在C++,布尔类型值只能是truefalse。 cout<<b1<<endl;: 使用cout打印变量b1值,也就是true。...在C++,输出布尔值时会自动转换为字符串"true""false"。 b1=1515;: 将变量b1值更改为整数1515。在C++,布尔类型值也可以是0非0任何整数。...这些是C++主要变量类型。根据需要,还可以创建自定义类型和结构,以满足特定编程需求。 C++14引入了一些新变量类型,这些类型在C++11和C++17都有所扩展。...以下是一些C++14引入新变量类型: 原子类型(Atomic Types):这些类型定义在头文件,用于表示可以在不引起其他线程阻塞情况下被单独操作值。

    18220

    被蚂蚁面试官拷打了,基础真的是太重要了...

    ) 5、数据和缓存不一致性问题如何解决(老生常谈了) 6、C++为什么父类要定义虚析构函数(可能看我不太懂C++,问了个奇怪问题) 7、C++14、17、20新特性有了解吗 8、C++shared_ptr...具体步骤是,先删除缓存,再写数据,休眠一段时间后再次删除缓存。设置缓存过期时间,所有的写操作以数据为准,只要到达缓存过期时间,则后面的读请求自然会数据读取新值,然后再回填缓存。...7、C++14、17、20新特性有了解吗 C++14、C++17和C++20新特性是C++语言不断发展和完善结果。...下面是一些主要新特性: C++14新特性包括: 泛型Lambda函数:在C++11,Lambda函数形式参数需要被声明为具体类型,但在C++14,允许Lambda函数形式参数声明中使用类型说明符...10、auto自动推导类型有哪些机制 在C++,auto关键字用于自动推导变量类型。它遵循以下机制: 当声明为指针引用时,auto推导结果将保持初始化表达式const属性。

    18121

    C++概述

    C++在这一技术同样扮演着重要角色 在数字图像处理领域:比如**OpenCV** 视觉识别技术 在网络软件领域:C++拥有大量成熟用于网络通信,ACE是其中最具有代表性跨平台,在许多重要企业部门甚至是军方都有应用...“学院派”角度来说,C++支持面向过程编程、面向对象编程和泛型编程,而C语言仅支持面向过程编程。...头文件完整内容复制到.cpp文件。...(2)编译器把每个.cpp文件(源文件)转换为.o或者.obj文件对象文件):包含了源文件内容对应机器码 (3)链接程序把程序.obj文件合并到包含完整可程序程序文件(.exe) *2.3...cl HelloWorld.cpp # 编译、链接生成 .exe 文件 如果要使用微软编译器cl在控制台编译及链接C++程序,需要进行相关配置: 注意:在不同操作系统不同 VS

    88430

    C++】如何巧妙运用C++命名空间:初学者必备指南

    C++标准第一个版本,绝大多数编译器都支持,得到了国际标准化组织(ISO)和美 国标准化协会认可,以模板方式重写C++标准,引入了STL(标准模板)C++03 C++标准第二个版本,...C++11 增加了许多特性,使得C++更像一种新语言,比如:正则表达式、基于范围for循 环、auto关键字、新容器、列表初始化、标准线程C++14 对C++11扩展...为了避免这种问题出现,C++引入了命名空间来对标识名称进行本地化,以避免命名冲突名字污染命名空间关键字:namespace具体名称冲突用例:报错理由:创建一个整型变量名称为rand,而rand是stdlib.h...return 0;}其中关于cout和cin还有很多更加复杂用法,这里就不展开学习早期标准将所有功能在全局域中是实现,声明在.h后缀文件,使用时只需包含对应头文件即可,后来将其实现在std命名空间下...using namespace std展开,标准就全部暴露出来了,如果我们定义跟重名类型/对象/函数,就存在冲突问题。该问题在日常练习很少出现,但是项目开发中代码较多,规模大,就很容易出现。

    17210
    领券