C++高级编程(第3版) 读书笔记

C++高级编程(第3版)

  1. p163 RVO下返回const std::string&与string的区别?
  2. p196 ~T()中调用virtual函数式,执行基本的实现,而不是派生类的重载版本
    1. 子类virtual中调用基类的版本,使用作用域限定语法:Base::f()
  3. p198 upcast时应使用&或*类型,而不是value类型(导致截断)
    1. Note:多继承情况下兄弟子类之间的类型转换...(dynamic_cast只能用于基类/子类之间的转换!)
  4. p203 std::numeric_limits::quiet_NaN()
  5. p208 多继承
    1. using Dog::eat(); //显式指定使用哪个基类重载版本(或称显式继承基类的virtual实现版本)
    2. C++不允许同一个基类被继承多次,但是允许菱形继承(why?最顶层的基类需要是抽象类)
    3. p215 当使用多个using继承多个基类的构造函数时,可能需要显式声明冲突的构造函数
    4. p226 子类只有一个vtable,其项可以指向基类的方法实现?
    5. p228 RTTI的typeid:唯一的作用是用于调试log输出
    6. p229 虚基类: class Dog  : public virtual Animal { ... //还有一个“虚继承”没讲?不对,虚基类就是虚继承
  6. p219 派生类无法调用基类的private方法,并并意味着无法重写这些(virtual)方法
  7. p238 右值引用及移动语义(临时对象,浅表body及所有权转移)
  8. p246 constexpr函数
  9. p249 不同源文件中的非局部变量的初始化顺序是不确定的
  10. p257 C++ 11: 统一初始化 ClassA a = { ... };
  11. p259 初始化列表:initializer_list 元素必须是同一类型
  12. p260 特性
    1. C++ 11:[\[noreturn]] [\[carries_dependency]]
    2. C++ 14:[\[deprecated]]
  13. p262 用户自定义字面量:raw/cooked
    1. 生模式:std::complex operator "" _i(const char* p);熟模式使用(const char* s, size_t len)作为参数
    2. C++ 14:"Hello"s 及h,min,s,ms,us,ns用于std::chrono::duration
  14. p280 方法模板
    1. 对赋值和拷贝构造很有用?
    2. 不能用于virtual和dtor
  15. p287 模板继承 vs 模板特例化
  16. p288 替补函数语法
    1. C++ 11:auto f(T1 t1, T2 t2) -> dectype(t1+t2) { return t1+t2; } //这种写法实在很别扭
    2. C++ 14:直接用auto声明返回值类型
  17. p319 throw; //rethrow; 为什么重新抛出异常不需要任何参数?证明异常是C++运行时机制?
    1. p336 vs std::throw_with_nested(MyException("error!"));
  18. p341 new handler(略)
  19. p343 构造函数对function-try-blocks(这个知识点有点生僻)
  20. p371 C++ 11:可以将operator T()标记为explicit
    1. p372 智能指针类定义 operator *() 以使得可执行 if (!p) 或 if (p==nullptr)比较
  21. p414 V.emplace_back(12, "A"); //相当于V.push_back({12, "A"}); 在容器V对内部位置就地构造对象
  22. STL算法
    1. p458 find()如果没有找到特定元素,返回的是调用参数指定的尾部迭代器,而不是容器的
      1. p460 auto it = find_if(cbegin(Vec), endIt, [](int i){return i>100});
    2. p462 lambda
      1. mutable修饰:使得按值捕获可以修改变量(相当于左值了),但为什么不用按引用捕获呢?
      2. C++ 14:参数无需指定类型,可以由编译器自动推断:[](auto i){return i>100}
      3. C++ 14:允许捕捉表达式
      4. lambda作为参数,形参:const function& callback
      5. p468 算术函数对象(模板化的运算符封装):plus、minus、multiplis、divides、modulus
        1. ?C++ 14支持“透明运算符仿函数”:multiplis<>()
      6. 比较函数对象:equal_to、not_equal_to、less、greater、less_equal、greater_equal
        1. 例:priority_queue, greater<>> myQueue;
      7. 函数对象适配器
        1. bind
          1. placeholders:_1 _2
          2. ref:传递引用参数
          3. 显式指定重载函数的版本:auto f = bind((void(*)(float))overloaded, _1);
        2. mem_fn(不如使用lambda)
    3. p479 C++ 14添加了equal()和missmatch()的一个新版本...
    4. p482 copy()只能改写目标容器中的元素,不能插入:copy(cbegin(v1), cend(v1), begin(v2));
      1. 变体:copy_backward copy_if copy_n partition_copy
    5. remove-erase习俗:根据谓词将源容器集合分成保留和删除的,然后调用容器的erase方法
      1. auto it = remove_if(begin(vec), end(vec), pred); ==> vec.erase(it, end(vec));
    6. unique是特殊的remove(O, really?那怎么用remove来实现unique?)
    7. for_each
  23. p499 字符串前缀/字符类型:u8/UTF8的char、u/char16_t、U/char32_t、L/wchar_t
  24. p501 wcout.imbue(locale("C"); //类似于en_US,但数字输出不带任何标点符号
  25. regex库
    1. 基本模板类型:basic_regex、match_results、sub_match
    2. 3个关键算法:regex_{match, search, replace} //search只用于寻找第一个匹配?
    3. 迭代器:regex_iterator regex_token_iterator(获取匹配的所有实例)
  26. p520 std::function的模板参数:RetType(ArgTypes...)
  27. p530 随机数引擎模板
    1. random_device
    2. linear_congruential_engine
    3. mersenne_twister_engine
    4. subtract_with_carry_engine
  28. p535 分布
    1. ... auto gen = bind(dist, engine);
  29. p551 自定义STL扩展:hash_map(略)
  30. p586 模板参数模板(定义模板类型参数之间的约束关系)
  31. p588 非类型模板参数不能是对象,只能是int/枚举/指针/引用
  32. p590 部分特化
    1. class A ...
  33. p592 函数模板不允许部分特化,只能重载
  34. 模板递归*
  35. p600 可变参数模板
    1. template class MyVariadicTemplClass {};
    2. void f(T1 a1, Tn... args){ ... f(args...); } //这种语法让人想起了Scheme语言里的卫生宏。。。
    3. 为了在使用非const引用时也能使用字面量,使用rvalue引用 + std::forward完美转发 改写:
      1. void f(T1&& a1, Tn&&... args) { ... f(std::forward(Tn>(args)...); } //Fuck!
  36. p603 元编程
    1. p607 trait(略)
  37. p618 C++中不要使用realloc!(但是JIT引擎经常需要手工控制class的内存布局?)
  38. 多线程:略

你可能感兴趣的:(读书笔记)