勿在浮沙筑高台(GeekBand第四周学习笔记)

2017-02-13  本文已影响0人  wtcamel

本周的学习中,侯老师又一次强调了基础的重要性。这周的课程内容多而散,而且涉及到以前就不太熟悉的模板,消化吸收就比较慢了。先放出主要课程内容结构,后面再慢慢填坑。

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)。

上一篇下一篇

猜你喜欢

热点阅读