美文网首页
勿在浮沙筑高台(GeekBand第四周学习笔记)

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

作者: wtcamel | 来源:发表于2017-02-13 23:08 被阅读0次

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

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

    相关文章

      网友评论

          本文标题:勿在浮沙筑高台(GeekBand第四周学习笔记)

          本文链接:https://www.haomeiwen.com/subject/djitwttx.html