都在说Modern C++和C++不是一个东西,到底MordenC++好在哪里,学了才有发言权。
why Morden C++
C++ 98的目标:
- 支持面向对象编程,支持泛型编程
- 支持数据抽象
C++ 11的目标: - 使得C++成为更好的适用于系统开发以及库开发的语言
- 使得C++语法一致,易于教学
- 向前兼容C++98/03
C++11从很早就开始准备,原本代号C++0x,一直到11年才完成,也就改名了C++11
理解了定位再去看具体得特性调整,才会更能体会到用法和必要性。
C++11的具体思路:
- 通过内存模型、线程、原子操作等来支持本地并行编程(NativeConcurrency)。
- 通过统一初始化表达式、auto、declytype、移动语义等来统一对泛型编程的支持。
- 通过constexpr、POD(概念)等更好地支持系统编程。
- 通过内联命名空间、继承构造函数和右值引用等,以更好地支持库的构建。
C++11设计理念
- 保持语言的稳定性和兼容性(Maintain stability and compatibility)。
- 更倾向于使用库而不是扩展语言来实现特性(Prefer libraries to languageextensions)。
- 更倾向于通用的而不是特殊的手段来实现特性(Prefer generality tospecialization)。
- 专家新手一概支持(Support both experts and novices)。
- 增强类型的安全性(Increase type safety)。
- 增强代码执行性能和操作硬件的能力(Improve performance and abilityto work directly with hardware)。
- 开发能够改变人们思维方式的特性(Make only changes that change theway people think)。
- 融入编程现实(Fit into the real world)。
编译器支持情况:
gcc从4.3开始支持C++11,clang从2.8开始支持C++11
总的来说,灵活的静态类型、小的抽象概念、绝佳的时间与空间运行性能,以及与硬件紧密结合工作的能力都是C++11突出的亮点。
what Morden C++
对于C++98/03的改进,这些改进可以分为语言特性改进和库特性改进。
语言特性
图片来自《深入理解C++11:C++11新特性解析与应用》
库特性
- 算法增强Algorithm improvements
- 容器增强Container improvements
- 分配算符Scoped allocators
- std::array
- std::forward_list
- 无序容器Unordered containers
- sts::tuple
- 类型特性Type traits
- std::function, std::bind
- unique_ptr
- shared_ptr
- weak_ptr
- 线程Threads
- 互斥Mutex
- 锁Locks
- 条件变量Condition variables
- 时间工具Time utilities
- std::future, std::promises
- std::async
- 随机数Random numbers
- 正则表达式regex