新增默认函数&模板可变参数

C++11后的默认函数

c++新增俩默认构造:   移动构造&移动赋值

C++11后的8个默认成员函数(实际常用只有六个)

手动实现构造,还会自动生成析构吗

会的

编译器自动生成 移动构造/移动赋值函数 的条件

移动构造, 移动赋值,析构, 拷贝构造, 拷贝赋值

三五法则

如果手动定义了五法则中的任意一个函数, 编译器则不会自动生成其他四个默认函数

如:如果我显示定义了析构, 编译器就不会自动生成拷贝构造函数等

三五法则/零法则 详情见:CSDN

Default & delete 强制/阻止生成默认函数

强制编译器生成默认函数

default 换为 delete 可阻止默认生成

模板可变参数

参数包代表多个参数类型多个参数(0-无穷个)

模板参数包

函数形参参数包

sizeof求包大小 要加 ...

如:  sizeof...(args)

直接得出args个数, 而非空间大小

传递整个参数包  args...

Args 的 遍历

递归遍历

void Print()

{

    cout << endl;

}



template <class T, class ...Args>

void Print(T&& x, Args&&... args)

{

     cout << x << " ";

     Print(args...);

}

另一种遍历

注意...与{}与逗号表达式作用

这里...表示一种模式, 类似于for in

push_back  &   emplace_back 对比

定义:

对比:

两者每次只能添加一个节点

但后者可以传参数包,前者不可

emplace不会解析args,只是搬运

模拟emplace_back传递args过程

template <class... Args>

void emplace_back(Args&&... args)

{

    insert(end(), std::forward<Args>(args)...);

}



iterator insert(iterator pos, Args&&... args)

{
    
    Node* cur = pos._node;

    Node* newnode = new Node(std::forward<Args>(args)...);

    Node* prev = cur->_prev;

    // prev  newnode  cur

    prev->_next = newnode;
    
    newnode->_prev = prev;

    newnode->_next = cur;

    cur->_prev = newnode;

    return iterator(newnode);

}



上课课件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值