C++11 右值引用(1)定义及引用类型

先参考上一节  C++11 左值 右值 ,本节是右值引用的基础及判断方法。

一 右值引用

C++11新增的右值引用概念,用&&表示。

二 引用类型

引用类型可以引用的值类别备注
非常量左值常量左值非常量右值常量右值

Type&

Y

N

N

N

只能绑定到非常量左值

const Type&

Y

Y

Y

Y

万能类型、用于拷贝语义

Type&&

N

N

Y

N

只能绑定到右值。用于移动语义和完美转发

const Type&&

N

N

Y

Y

暂无用途

从表中可以得出左值引用和右值引用的基本使用方法。

三 判断

标准库<type_traits>头文件中提供了3个模板类 is_rvalue_reference , is_lvalue_reference,  is_reference

#include <iostream>
#include <type_traits>

// 判断引用、左值引用、右值引用
int a = 1;
int& b = a;
int&& c = 1;

cout << "a is_reference: " << is_reference<decltype(a)>::value << endl;
cout << "a is_lvalue_reference: " << is_lvalue_reference<decltype(a)>::value << endl;
cout << "a is_rvalue_reference: " << is_rvalue_reference<decltype(a)>::value << endl;

cout << endl;
cout << "b is_reference: " << is_reference<decltype(b)>::value << endl;
cout << "b is_lvalue_reference: " << is_lvalue_reference<decltype(b)>::value << endl;
cout << "b is_rvalue_reference: " << is_rvalue_reference<decltype(b)>::value << endl;

cout << endl;
cout << "c is_reference: " << is_reference<decltype(c)>::value << endl;
cout << "c is_lvalue_reference: " << is_lvalue_reference<decltype(c)>::value << endl;
cout << "c is_rvalue_reference: " << is_rvalue_reference<decltype(c)>::value << endl;

结果如下:

四 参考资料

《深入理解C++11》关于引用类型

cppreference 中关于is_rvalue_reference, is_lvalue_reference,  is_reference

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值