C++11 右值引用(1)

版权声明: 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

猜你喜欢

转载自blog.csdn.net/luoshabugui/article/details/83650241