explicit 主要用于处理一个参数的构造函数,使其不用于隐式类型转换(防止二义性)
operator->() C++设计 ->可以一直保留下去
仿函数
仿函数会隐式继承他们中的一个(详见 标准库课程)
namespace经验谈
放一些全局的测试代码。。不用花时间去想新名字
template的实现:二次编译
模板偏特化 —— 个数的偏
从左至右绑定类型名,不可跳过。
模板偏特化 —— 范围的偏 (例:特化指针类型)
模板模板参数 —— 具体内容见C++11
这个不算模板模板参数,因为模板类型已写死,没有变动的可能。
可变参数模板 (variadic templates) C++11
包pack:类型/类型参数...args typename...类型参数
注意要重载一个无参空函数,因为包的size可能为0,而原本的参数必须大于等于1
auto C++11
必须初始化。
注意 foreach 方式改变数组值时,必须取引用!
for( auto& elem : vec ){
elem *= 3;
}
引用
const是函数声明的一部分
Inheritance + Composition 关系下的构造和析构
构造:Base() -> Component() -> Derived()
析构:~Derived() -> ~Component() -> ~Base()
静态绑定:直接call
动态绑定:查对象的vtbl,再call (指针+向上转型+调用虚函数)
注意B b;A a = (A) b;这是静态绑定!
当成员函数的const 和 non-const版本同时存在,const对象只会调const版本
non-const对象只会调用non-const版本
原文:https://www.cnblogs.com/Cha2azzZ/p/12904401.html