[ C++ ] 勿在浮沙筑高台 —— 拾遗

  • explicit 主要用于处理一个参数的构造函数,使其不用于隐式类型转换(防止二义性)

  • operator->() C++设计 ->可以一直保留下去

  • 仿函数

    仿函数会隐式继承他们中的一个(详见 标准库课程)

  • namespace经验谈
    放一些全局的测试代码。。不用花时间去想新名字

  • template的实现:二次编译

  • 模板偏特化 —— 个数的偏

    从左至右绑定类型名,不可跳过。

  • 模板偏特化 —— 范围的偏 (例:特化指针类型)

  • 模板模板参数 —— 具体内容见C++11

    这个不算模板模板参数,因为模板类型已写死,没有变动的可能。

  • 可变参数模板 (variadic templates) C++11
    包pack:类型/类型参数...args typename...类型参数

    • 模板参数包(template parameters pack)
    • 函数参数类型包(function parameter types pack)
    • 函数参数包(function parameters pack)
      sizeof(args) 返回包内参数个数

    注意要重载一个无参空函数,因为包的size可能为0,而原本的参数必须大于等于1

  • auto C++11
    必须初始化。

  • 注意 foreach 方式改变数组值时,必须取引用!

       for( auto& elem : vec ){
       	elem *= 3;
       }
    
  • 引用

  • const是函数声明的一部分

  • Inheritance + Composition 关系下的构造和析构
    构造:Base() -> Component() -> Derived()
    析构:~Derived() -> ~Component() -> ~Base()

  • 静态绑定:直接call
    动态绑定:查对象的vtbl,再call (指针+向上转型+调用虚函数)
    注意B b;A a = (A) b;这是静态绑定!

  • 当成员函数的const 和 non-const版本同时存在,const对象只会调const版本
    non-const对象只会调用non-const版本

posted @ 2020-05-17 11:23  Cha2a_zzZ  阅读(150)  评论(0)    收藏  举报