1. 程式人生 > >C++11 右值引用(1)

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