运算符重载

  • 输入输出运算符:输入输出运算符必须是非成员函数,一般将其声明为友元。输入运算符必须处理输入可能失败的情况,输出则不需要。
  • 算数和关系运算符:关系运算符中的一个应该把工作委托给另一个,如果一个类在逻辑上有相等性的含义,则该类应该定义operator==;由于很多工作可以委托给另外一个运算符,可以写一个通用的类来定义其他的运算符,减少代码量(参考boost/operator.hpp),如下:

关于auto

auto一般会忽略顶层const,如const int i = 0; auto j = i;
则j的类型是int,可以显示的加上const,即`const auto j = i;

关于decltype

delctype会得带正确的数据类型,不会去除顶层const特性。decltype内部可以是表达式。如decltype(42)得到了int类型,有一点要注意就是对于一个指针的解引用用decltype会得到相对应的引用类型比如:int *p=&i;decltype(*p) q;得到的是int&类型并非int类型,还有一点,decltype((variable))的结果永远是引用,而decltype(variable)只有当variable是引用时才是引用。

RTTI

  • RTTI的作用
    每个类对象都具有静态类型和动态类型,静态类型在编译的时候就已知,而动态类型在运行的时候才能确定。虽然有虚函数,但是虚函数有其局限性。

迭代器相关

  • 迭代器类别:输入迭代器,输出迭代器,前向迭代器,双向迭代器,随机存取迭代器。
    迭代器适配器:插入迭代器,流迭代器, 反向迭代器,移动迭代器。