C++中decltype与C中的typeof相似
模板是C++重载的高级展现形式
左值右值及左值引用右值引用
值:1、左值 2、右值
引用:1、左值引用 2、右值引用
当一个值为左值时,它优先绑定左值引用
当一个值为右值时,它优先绑定右值引用
左值:表常态,到了下一行,单一变量还能访问到。
右值:表临时,到了下一行,单一变量不能访问到。
左值引用,奇数个&。
右值引用,偶数个&。
左值右值的区分是为了分多种情况进行处理。
move()函数:将任何表达式变成右值。
forward<int &&>(x):将x调整成int &&(右值)类型。
当没有move()和forward()的状况如下:
函数希望返回左值->返回引用
函数希望返回右值->返回值
移动构造:是左值右值做区分所构成的产物,将一个对象直接全部给另一个对象,并销毁(师傅归西,把内力全部传给徒弟)
例:
Array(Array &&A) : __size(a.__size), data(a.data){
a.data = nullptr;
a.__size = 0;
return 0;
}
移动构造的优势:
1、深拷贝是O(n)的操作,移动构造是O(1)的操作。
模板的特化:
1、类模板(特化【全特化】,偏特化)
2、函数模板(特化)
3、函数模板没有偏特化,模板类有偏特化
特化优先级顺序:1、全特化 2、偏特化 3、无特化
第一个为无特化,第二个为全特化,第三个为偏特化。