模板的使用(续)(左值右值)

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、无特化

 第一个为无特化,第二个为全特化,第三个为偏特化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值