历代C++标准发布时间:
- C++98:1998年09月01日
- C++03:2003年10月15日
- C++11:2011年09月01日
- C++14:2014年08月18日
- C++17:2017年12月01日
- C++20:2020年12月18日
- C++23:制定中,预计2023年底发布
- C++98是C++标准的第一个版本,其定义了语言的基本构造、STL和标准库。而C++03只是在C++98的基础上修正了一些错误和不一致,并没有引入什么新的语言特性或库功能,所以有时候可能会将它们看作同一个C++标准(称为"C++98/03")。
- 而C++11是一次非常大的升级,引入了很多新的语言特性和库功能,使得C++感觉像一门新的语言。这些特性需要经过长期的设计、讨论、测试和反馈,才能达到标准委员会的要求。而且,由于C++是一门非常复杂和灵活的语言,要保证与之前版本的兼容性和一致性也是一个巨大的挑战。所以,C++03之后时隔八年才发布新的C++11标准。
C++标准之间的关系是,每一个新的标准都是在前一个标准的基础上进行修改和扩展的。也就是说,C++20包含了C++17以及之前所有C++标准的内容,但是也可能有一些变化和废弃的特性。
也就是说,在C++20中,我们仍然可以找到最简单、最基本的标准,比如"int、char、bool"等基本数据类型之类的标准。
也就是说,C++11的新特性,到了C++14中就算不上新特性了(成为已有特性);C++14的新特性,到了C++17中就算不上新特性了(成为已有特性);往后亦是如此。
当编译器不支持C++新特性而去使用该特性时会导致编译错误,所以我们有必要了解自己的C++编译器对C++标准和特性的支持。
查看C++发展史:
- https://zh.cppreference.com/w/cpp/language/history
查看历代C++标准:
查看历代C++标准新特性:
查看编译器支持:
- https://zh.cppreference.com/w/cpp/compiler_support
- GCC
- Clang
- MSVC
- Intel C++
学习现代C++,我们不仅需要在掌握基本C++入门的基础上继续学习历代C++标准的新特性,还需要了解现代C++的编程范式和风格,比如:
- 优先使用 STL(标准模板库)中的容器和算法,而不是裸指针和手动循环。
- 优先使用智能指针(如 unique_ptr、shared_ptr 等)来管理动态分配的资源,而不是手动调用 new 和 delete。
- 优先使用 auto 关键字来推导变量的类型,而不是显式地指定类型。
- 优先使用 lambda 表达式来定义简单的函数对象,而不是传统的函数指针或仿函数类。
- 优先使用 constexpr 关键字来定义编译期常量和函数,而不是运行期常量和函数。
- 优先使用模板元编程(template metaprogramming)或概念(concepts)来实现通用编程(generic programming),而不是宏或继承。
- …