本周的学习中,侯老师又一次强调了基础的重要性。这周的课程内容多而散,而且涉及到以前就不太熟悉的模板,消化吸收就比较慢了。先放出主要课程内容结构,后面再慢慢填坑。
1. conversion function,转换函数
上图中,红色框内部分,即转换函数。
需要注意的是,转换操作符必须是类的成员,而且不能指定返回类型,不能接受形参。
2.non-explicit-one-argument ctor
只要一个实参就够了。(可以不止一个实参!)
Fraction f(3,5)
double d=4+ f// 编译器将调用 operator double 将f 转成 double
double d2 = f + 4 //error
上面这个实例,如果构造函数没有使用explicit,在构造函数和转换函数并存的时候,编译器发现有两种方式处理,存在二义性,于是会报错。
3. auto关键字
auto应该是c++最优雅的特性了,没有之一。
与c#中的var不同的是,auto不会允许没有初始化值的声明,例如:
int x;
auto y; //error
有些开发者总是会直接用一些没有初始化的变量,然后后面运行结果不对。而运行的错误找起来总是比编译的难许多。
使用迭代器的时候,auto更是能省很多字。配合decltype,可以把以前很丑的实现变得简洁明了。
上面的例子,x,y是参数,返回类型是x*y,那如何得到x*y的类型呢?可以用decltype来取。可是,你要取的是x*y的,但x,y在参数之后,所以先转为万能的0,再转为指针,然后再取指针(#2)。有了auto,用auto占位即可(#3)。