去年写的两遍日志
这几天跑步了,昨晚看到一篇关于跑步的文章,摘抄下来。“跑步更大的收益在心里层面,每次跑步,你都打赢一个“战胜自我,自我控制”的小小战役,我的经验是,跑过四十分钟,接下来的每一秒,都想放弃,此时你得不停跟自己对话:再坚持十秒!再跑一百米!漂亮,竟然又跑了两分钟!再燃烧十卡热量把!你听,脂肪在痛哭!”“再这种专注中,不会有别的想法(忧伤痛苦也会消失),秒表数字的跳动才是唯一。最后一秒到来,汗水不停涌出,大脑分泌的内咔肽让人飘飘欲仙,每喝一口水都无比甘甜,有种征服的体验”
在自己的primer上抄了陈硕的一段话,不明觉厉,先记下懂学得多了再体会体会。“什么是c++编程中最重要的编程技法?我认为是”用对象来管理资源“,即RAII(Resource Acquisition is Initialization 资源获取就是初始化)资源包括动态分配的内存,也包括打开的文件、TCP网络连接、数据库连接、互斥锁等。借助RAII,我们可以把资源管理和对象生命期管理等同起来,而对象生命期管理在现在C++里根本不困难,只需要花几天时间熟悉几个智能指针的基本用法即可。学会了这三招两式,现在的c++程序中完全可以不写delete(真的吗?还是不明觉厉啊),也不必为指针或内存错误操心。现在c++程序里面出现资源和内存泄露的唯一可能是循环引用,一旦发现,也很容易修正设计和代码。这方面的详细内容请参考《Effective c++(第五版)》的第三章(资源管理)(还有一本more effective c++都是大神书啊,据说没项目经验不好看懂)。”
已经读了三章,果然是好书,进入作者的思维,但是学了c++有什么用呢?我也不知道,说小点可以用QT写些小软件,说大点算是通过它来触及计算机学科吧。
人生苦短,所以得取舍,等用到再研究,何况学多了我也记不住。阅读计划:
前三章除了标准库bitset类型已读,感觉先用不着位操作。
第四章数组和指针先不看,用vector代替数组,字符串用string。
第五章表达式先不看,只看类型转换。
第六章语句先不看,我不抛异常行吗?
@第七章函数重点看!函数参数和返回类型是class类型时怎么处理的。
第八章标准I/O库先不看,先用着cin、cout就行。
@第九章和第十章好好看容器,第十章还有个文本查询小程序好好看看
@第十一章泛型算法好好看
@第十二章类和第十三章copy control相当重要
第十四章重载操作符与转换先不用,不看。
@第十五章面向对象编程和第十六章模板和泛型编程看感受一下
@高级部分看,然后适当补补前面没看的章节
第七章函数读书笔记
虽然全看懂了,但是合上书后怎么感觉什么也不知道了。函数重要的组成在于返回值和函数形参,函数形参用对应的实参进行初始化,形参的重点又在于形参类型,包括内置类型、类类型、符合类型、函数类型(编译器转为函数指针类型)和函数指针类型。
1、先说引用和const,所有不以引用方式传进来的实参都是实参的副本,以引用方式传进来的才是真正用的实参不做开销,const引用不能修改传进来的实参,不加const引用暗示这函数要修改实参。
2、数组类型,数组不能复制,所以数组形参类型会自动转化为指针,这样就自动忽略数组长度,即传参也不会检查数组长度。但是当通过引用传递数组(int (&arr)[10]),此时编译器不会将数组实参转化为指针,而是传递数组的引用本身,数组大小成为形参和实参类型的一部分。多维数组形参类型(c++中没有多维数组)就是数组的数组,int (*matrix) [10] 为含有10个int型元素的数组的指针(这是个指针),区别 int *matrix[10] 为还有10个int型指针的数组(介是个数组),或者形参类型可以直接声明为 int matrix[][10] 。那如何处理数组长度,用NULL结束标记(c风格字符串这样),传位置指针(vector这样),传数组大小。
3、函数指针类型,函数的特点是返回类型和形参,所以函数指针类型的俩大特点就是返回值类型和其形参。定义:bool (*foo)(int,int);typedef定义版:typedef bool(*foolge)(int,int);此后foolge类型相当于前面那一坨,即foolge foo;就好。
4、函数类型 bool(int,int)转为bool(*)(int,int)函数指针类型。这就使我好奇这样bool (*)(int,int) foo;行吗?测试不行!
5、函数返回值是指向函数的指针时,int(*ff(int))(int,int);它的返回值类型是int(*) (int,int),若写成如下格式就好理解多了,typedef int(*pf)(int,int);pf ff(int);或者这样也是可以的 typedef int p(int,int);p *ff(int);(人生苦短,不记这么多)。
6、关于重载函数,void foo(const int& a)和void foo(int& a)是不同函数,不加引用编译不过,其实就是前者传实参时计算机能区分无歧义,后者有歧义。
7、最后,函数名将被自动解释为指向函数的指针,这样就知道怎么给前面声明的各种函数指针类型赋值了吧。
有几处细节,“hello”字面值字符串的类型是const char*。理解下传递指向指针的引用,是不是就是定义了一个指向这个引用的指针。千万不要返回局部对象的引用或者指针。隐含的this指针和const成员函数。合成的默认构造函数一般使用于仅包含类类型成员的类,而对于含有内置类型或复合类型成员的类,则通常应该定义他们自己的默认构造函数初始化这些成员。
吐槽一下同学的锤子手机,T2应该会不错。好的工业设计加UI应该可以做到让4.95寸的手机单手操作不累,T1当装饰品却是不错,前后玻璃面板其实是被薄薄的塑料包裹着和苹果4类似,但是拿在手里真是硌手。屏幕比moto x长了一厘米多,单手操作和手感被x秒成渣渣了。