C++11 右值引用(1)
阿新 • • 發佈:2018-11-07
先參考上一節 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>
#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