运算符重载
- 输入输出运算符:输入输出运算符必须是非成员函数,一般将其声明为友元。输入运算符必须处理输入可能失败的情况,输出则不需要。
- 算数和关系运算符:关系运算符中的一个应该把工作委托给另一个,如果一个类在逻辑上有相等性的含义,则该类应该定义operator==;由于很多工作可以委托给另外一个运算符,可以写一个通用的类来定义其他的运算符,减少代码量(参考boost/operator.hpp),如下:
auto一般会忽略顶层const,如const int i = 0; auto j = i;
则j的类型是int,可以显示的加上const,即`const auto j = i;
delctype会得带正确的数据类型,不会去除顶层const特性。decltype内部可以是表达式。如decltype(42)
得到了int类型,有一点要注意就是对于一个指针的解引用用decltype会得到相对应的引用类型比如:int *p=&i;decltype(*p) q;
得到的是int&
类型并非int类型,还有一点,decltype((variable))
的结果永远是引用,而decltype(variable)
只有当variable是引用时才是引用。