1.1.1 conversion function 转换函数
这里double()不能指定返回值,而直接使用operator doule()这种形式。
但是这里这段代码在G++下并不能将f成功转换为0.6,而是0。应该:
或者直接将两个private变量声明为double才能成功转换。
1.1.2 non-explicit-one-argument ctor
Q:为什么是one-argument
A:因为只有一个参数需要真正被定义(num)。
上图错误原因在于编译器不知道表达式中的“4”使用Fraction转换后使用double还是使用“+”操作符重载。将上图中double() 或 operator +的任意一个声明删除就可以通过编译。
explicit(程序中打错了)意思是必须使用显式声明。例如Fraction d2 = f + Fraction(4)就可以。
STL中的应用:
小结: explicit vs non-explicit vs converision
前两者基本在构造函数中使用,用来进行显式或非显式的声明,而转换函数常用于对类型转换进行重载。
1.2 智能指针
智能指针也叫pointer-like-classes。也就是类指针。而两者区别在于类指针多了一层封装机制,将指针使用类封装。设计智能指针的初衷应该是许多程序员常常创建指向某个对象的指针之后忘记删除它或因为程序执行(比如抛出了一个异常)没有删除,导致产生悬垂指针,发生内存泄露。而智能指针更好的控制指针的生命周期,使它安全地被删除。
参考:
http://blog.csdn.net/hackbuteer1/article/details/7561235
https://www.zhihu.com/question/20368881
http://www.cnblogs.com/lanxuezaipiao/p/4132096.html
1.3 仿函数
1.4 namespace
简单不细说了。
1.5 function template
member-template
模板的特化
我的理解中模板的特化相当于模板中的一个if语句,将模板中特别的例子特殊化定义。如果你有一个对某种的方法更好的实现,那么使用特化。
模板的偏特化
Q:偏特化和特化的区别?
A:偏特化相当于某个特化的IF语句,针对某种情况的全特化特殊实现称为偏特化。注意函数模板不能偏特化,因为语言不能实现。模板的特化可以通过函数的重载实现,而函数模板则不能。
模板模板参数
模板模板参数就是将一个模板作为另一个模板的参数。
最后一张图片的list<int>已经确定了,所以不是模板。