版权声明: https://blog.csdn.net/luoshabugui/article/details/83650241
先参考上一节 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