1-3 标准库、转换函数、explicit、代理模式
1 标准库
整个标准库都是用模板做的,继承非常少(现在不一定),也几乎没有虚函数,
所以它的思维不这种是面向对象的,而是模板泛型编程的思维
Dev-C++ 5.6编译器了解一下
2 转换函数:类型互相转换(转出去、转进来)
转出去:一般用operator type() const
转进来:一般用non-explicit-one-argument构造函数
上面的是转出去,可以看懂
上例是转进来,去掉了“转出去”函数,同时重载加号函数。
可以看懂。
第三种情况:
既有转出去,又有转进来,还有加。
两条路都能走通,所以就二义性了。
https://doc.qt.io/qt-5/classes.html // 临时网址
第四种情况:
explicit:明白的,明显的,表示:不要给我自动把4转成Fraction
无法相加,因为无法将4转为Fraction。
上面这些都是隐式转换
中括号也可以重载,代理模式:
vector偏特化为了bool类型,正常[]应该返回bool,但这里返回reference,用reference来“代理”本应返回的bool类型,reference有个转换函数可以转为bool值。不知道为什么要设计成这样?