《Effective Modern C++》阅读笔记 (03/29)

一、理解模板类型推导

  • 通常表现形式
template<typename T>
void f(ParamType param);
  • 参数param通常有三种形式
    ①按照指针或引用传递,通常不是指万能引用
    ②万能引用
template<typename T>
void f(T&& param);  //param is now a universal reference

在这里插入图片描述

③常数值传递,不是指针或引用
在这里插入图片描述

二、

十四、noexcept(如果一个函数不会抛出异常,那这个函数应该注明noexcept)

  • C++98和C++11不会抛出异常的写法
    在这里插入图片描述

  • noexcept会做出很大优化(编译器在抛出异常时候要保证栈上元素顺序析构,不保证析构顺序会有很大优化)
    在这里插入图片描述

  • 另外一个注意的点:容器元素在push_back的时候,优先利用移动构造函数,但是这个函数需要加上noexcept,否则发生异常数据会丢失

但是如果用效率低的拷贝构造函数,那么数据不会全丢失
在这里插入图片描述

  • 简单利用(高层是否抛出异常取决于底层是否剖出异常)
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43679037/article/details/129828694
今日推荐