C++11开始给语言本身带来了很多新特性,但同时也弃用了一些就特性;需要注意的是弃用并不等于彻底不用,只是暗示和建议程序员这些特性将从未来的版本中消失,应尽量避免使用。
包括但不限于以下特性被弃用:
• 不再允许字符串字面值常量赋值给一个 char *。如果需要用字符串字面值常量赋值和初始化一个
char *,应该使用 const char * 或者 auto。 cpp char *str = "hello world!"; // 将出现弃用警告
• C++98 异常说明、 unexpected_handler、 set_unexpected() 等相关特性被弃用,应该使用 noexcept。
• auto_ptr 被弃用,应使用 unique_ptr。
• register 关键字被弃用,可以使用但不再具备任何实际含义。
• bool 类型的 ++ 操作被弃用。
• 如果一个类有析构函数,为其生成拷贝构造函数和拷贝赋值运算符的特性被弃用了。
• C 语言风格的类型转换被弃用(即在变量前使用 (convert_type)) ,应该使用 static_cast、
reinterpret_cast、 const_cast 来进行类型转换。
• 特别地,在最新的 C++17 标准中弃用了一些可以使用的 C 标准库,例如 <ccomplex>、 <cstdalign>、
<cstdbool> 与 <ctgmath> 等