C++(标准库):01---C++标准的历史
原创
©著作权归作者所有:来自51CTO博客作者董哥的黑板报的原创作品,请联系作者获取转载授权,否则将追究法律责任
一、C++标准的历史
- C++标准初始于1989年,由国际标准化组织(ISO)推动。ISO其实是一个大群国家标准组织,成员机构包括美国的ANSI
- 下面是C++标准的发展历程:
- ①C++98:于1998年批准,是第一份C++标准规则
- 官方名称是Inforamtion Trchnology-Programming Languages-C++,文档编号ISO/IEC 14882:1998
- ②C++03:这是个所谓“技术勘误”(technical corrigendum,TC),内含不甚严重的C++98 bug修正
- 文档编号ISO/IEC 14882:2003.不论C++98或C++03都被视为“第一份C++标准规则”
- ③TR1:内含大幅度的标准库扩充。它所涵盖的扩充全部包含于namespace std::tr1内
- 官方名称是Information Technology-Programming Languages-technical Report onC++ Library Extensions。文档编号ISO/IEC TR 19768:2007
- ④C++11:批准于2011年,是第二份C++标准。C++11内含语言和标准库两方面皆十分重要的改善和强化,而TR1所做的扩充也被纳入称为namespace strd的一部分
- 官方名称又一次是Inforamtion Trchnology-Programming Languages-C++,新的文档编号ISO/IEC 14882:2011
- C++11这一标准长时间被称为“C++0x”,带着一种“将于2009年前完成”的大众期待,所以不论C++11还是C++0x,其实都是同一份东西,一律称之为C++11
二、关于C++11 标准的常见疑问
哪里可以获得这份标准
- 最近的一份免费的C++11 standard草案,文档名称是N3242。这份草案应该足够满足大多数用户和程序员,但如果你需要真正的标准规格书,必须付费给ISO或某个国属机构
为什么C++11较前一版本之间距离这么久
- C++11标准化过程花费了10年甚至不止,这是许许多多个人和公司的努力成果,这些努力包括提出改善和扩充建议
- C++的另一个目标是简化事情,为此C++11引进了许多提案
三、C++98和C++11的兼容性
- C++11的设计目标之一,是对C++98保持向后兼容
- 一些注意事项:
- 但是有一些旧版本的东西在C++11中仍然不可以编译通过:例如变量名无论如何也不可以和新导入的关键词相同
- 向后兼容仅适用于源码,不保证二进制兼容,因为那会导致问题,特别是当一个原有操作取得一个新式返回类型,因为“基于返回类型而形成的重载”是不被允许的(这适用于某些STL算法及STL容器的某些成员函数)
- 所以请以C++11编译器重新编译C++98程序的每一份源码,包括用到的所有程序库——通常都会成功。若以C++11编译器产生的二进制码链接C++98编译器产生的二进制码,则可能会失败
相关编译宏
- 下面是C++11的编译宏,如果你的程序使用的是C++11的语法,那么可以在编译之前加上这个宏
#define __cplusplus 201103L
#define __cplusplus 199711L