在学习现代C++之前,我们先了解一下从C++11开始,被弃用的主要特性
注意:弃用并非彻底不能用,只是用于暗示程序员这些特性将从未来的标准中消失,应该尽量避免使用。但是已被弃用的特性依然是标准库的一部分,并且处于兼容性的考虑,大部分特性其实会永久保留
- 不再允许字符串字面值常量赋值给一个
char *
。如果需要用字符串字面值常量赋值和初始化一个char *
,应该使用const char *
或者auto
。
char *str = "hello world!"; // 将出现弃用警告
- C++98异常说明,unexpected_handler、set_unexpected()等相关特性被弃用,应该使用
no_except
- auto_ptr被弃用,应使用
unique_ptr
- register关键字被弃用,可以使用但不再具备任何实际含义
- bool类型的++操作被弃用
- 如果一个类有析构函数,为其生成拷贝构造函数和拷贝赋值运算符的特性被弃用了
- C语言风格的类型转换被弃用(即在变量前使用
(convert_type)
),应该使用static_cast
、reinterpret_cast
、const_cast
来进行类型转换 - 在C++17标准中弃用了一些可以使用的C标准库,比如
<ccomplex>
、<cstdalign>
、<cstdbool>
、<ctgmath>
等 - …
还有一些比如参数绑定(C++11提供了std::bind
、std::function
)、export
等特性也被弃用了。我们不应该再去学习这些已经被弃用的,而是应该使用新标准。