conversion function转换函数:将自身转换为别的类型
形式:operator+空格+转换类型{}
没有参数、返回类型(与转换类型相同所以不写),加const。转换类型不一定是基本的数据类型,并且一个class中可以有多个合理的转换函数。
non-explicit-one-argument ctor:将别的类型转换成自身
parameter与argument 一个实参argument就足够了
explicit明确,大多数情况用在构造函数前,避免编译器自动调用构造函数进行转换,避免ambiguous歧义错误
转换函数的应用,例如:代理proxy
pointer-like classes
1.智能指针:智能指针里一定含有一个普通的指针,而操作符*和 ->必须重载
T* operator *() const {return *px;}
T* operator->() const {return px;} ->的特殊性,消耗完以后仍可以继续作用
2.迭代器:还必须重载++、--、!=、==,代表容器中的元素
模板参数
关于c++标准库
推荐书籍:《algorithms+data structure=programs》
c++中容器即数据结构,标准库还提供了很多常用的高效的算法,c也有标准库,最好把所有的算法和容器都使用一遍
了解编译器对c++2.0(c++11)的支持,有些需要经过设置才能支持,打印_cplusplus测试
variadic templates 数量不定的模板参数:如果递归调用函数本身,则会把参数分为一个和一包。当传入最后一个参数时,分为一个和零个,再调用另一个自己设计的同名函数。使用sizeof...(args)可以得到包中的参数个数。
auto:
形式:auto 变量名
让编译器自动推导出变量类型。比如当变量值由函数赋值时通过函数返回类型推得。
ranged-base for:
形式:for (decl(声明或定义的变量):coll(容器)){}
将coll中的每个变量依次赋值给decl,然后执行循环体
引用对编译器也是通过指针来实现的,引用必须设初值,并且一旦制定了代表的对象就不能再更改,引用的大小即它所代表的变量的大小。
Java中所有变量都是reference
object model对象模型: