第一章 迈向现代C++

第一章 迈向现代C++

1.1 被弃用的特性

弃用并不是彻底不能用,而是这些特性即将从未来的标准中消失,应该尽量避免使用。弃用的特性出于对兼容性的考虑,依然是标准库的一部分(这里是C++的原则,一直向前兼容,我感觉有点偶像包袱了)。

1.不再允许字符串字面值常量赋值给一个 char * 。如果需要用字符串字面值常量复制和初始化一个 char *,应该使用const char * 或者 auto 。(这里挺关键的)

2.C++98一场说明、unexpected_handler、set_unexpected()等相关特性将被弃用,应该使用noexcept。(我是UE4的程序员,这个东西用的比较少,不太了解)

3.auto_ptr被弃用,应该使用unique_ptr。(智能指针)

4.register关键字被弃用,可以使用但不再具备任何实际意义。(对寄存器操作)

5.bool类型的++操作被弃用。(从来没用过好吗)

6.如果一个类有析构函数,为其生成拷贝构造函数和拷贝赋值运算符的特性被弃用了。(面试可以装杯了)

7.C语言风格的类型转换被弃用(就是使用convert_type),应该使用static_cast、reinterpret_cast、const_cast来进行类型转换。(早就应该这么做了)

8.最新的C++17标准中弃用了一些C的标准库,比如<ccomplex>、<cstdalign>、<cstdbool>、<ctgmath>。

9.诸如参数绑定(旧的参数绑定)、export等特性页均被弃用。

C++11 提供了新的参数绑定的方式。

如果有些你从未使用过或者听说过,就算了,别费那个时间去了解它们,人要向前看。

1.2 与C的兼容性

C++不是C的一个超集,从一开始就不是。有许多的程序员说C++是对C的升级,从根上就错了,一个面向过程,一个面向对象,未来的发展方向也不一样。尽管传统C++和C语言的风格很像,也只能说两个物种长得比较像了。这就像人类和猴子,像不像,甚至远古的时候还有血缘关系,但是人类是高级动物。

编写C++时,要避免使用void*之类的C语言的程序风格。在不得不使用C时,注意使用 extern “C” 这种特性。将C语言的代码与C++代码进行分离编译,再统一链接。如以下代码:

//foo.h
#ifdef __cplusplus
extern "C"
{
#endif
	int add(int x, int y);
#ifdef __cplusplus
}
#enfif

//foo.c
int add(int x, int y)
{
    return x + y;
}

//1.1.cpp
#include "foo.h"
#include <iostream>
#include <functional>
int main()
{
    [out = std::ref(std::cout << add(1, 2))]()
    {
        out.get() << ".\n";
    }();  //Lambda表达式
    return 0;
}

上面的代码是直接从书上抄来的,也不多解释了,不难。主要是个人不太满意这种代码风格,本来挺简单的东西,要弄这么复杂,可能作者是为了展示现代C++吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值