c++ 左值、右值、右值引用、左值引用
2018-03-15 11:56
471 查看
c++里一切值必须属于左值、右值两者之一。
左值:一切变量(包括用const修饰的变量)、对象、包括引用都属于左值;
右值:一切字面值(可以是宏),临时无名对象(函数返回值)。
说明一下:函数返回值,返回的是某一个类型的值,并不是返回变量。
左值并不是说能放在"="左边的值就是左值
虽然用const修饰的变量其值不能改变,但是它仍是左值
一、左值引用
基本用法:type& 引用名 = 左值表达式;
const type& 引用名 = 右值表达式
注意事项:
1.左值引用仅仅为变量或对象取别名,必须在定义时赋值,因为只有值或
对象存在时,才有意义为它绑定别名。
2.当左值引用绑定值或对象后,就一直代表这该变量或对象,不会再绑定
其它变量或对象。"从一而终"。
二、右值引用
基本用法:type&& 引用名 = 右值表达式;
注意:
1.右值引用同样需要在定义的时候赋值,和左值引用一样;但是右值引用
同样也遵循"从一而终"。
2.右值引用不能绑定左值表达式,但是通常用std::move()将左值强制转
换成右值,再绑定如:
int a;
int&& r = a; //编译失败
int&& r1 = std::move(a); //正确
左值:一切变量(包括用const修饰的变量)、对象、包括引用都属于左值;
右值:一切字面值(可以是宏),临时无名对象(函数返回值)。
说明一下:函数返回值,返回的是某一个类型的值,并不是返回变量。
左值并不是说能放在"="左边的值就是左值
虽然用const修饰的变量其值不能改变,但是它仍是左值
一、左值引用
基本用法:type& 引用名 = 左值表达式;
const type& 引用名 = 右值表达式
注意事项:
1.左值引用仅仅为变量或对象取别名,必须在定义时赋值,因为只有值或
对象存在时,才有意义为它绑定别名。
2.当左值引用绑定值或对象后,就一直代表这该变量或对象,不会再绑定
其它变量或对象。"从一而终"。
二、右值引用
基本用法:type&& 引用名 = 右值表达式;
注意:
1.右值引用同样需要在定义的时候赋值,和左值引用一样;但是右值引用
同样也遵循"从一而终"。
2.右值引用不能绑定左值表达式,但是通常用std::move()将左值强制转
换成右值,再绑定如:
int a;
int&& r = a; //编译失败
int&& r1 = std::move(a); //正确
相关文章推荐
- C++ 左值和右值,左值引用和右值引用
- c++ 左值、右值、右值引用、左值引用
- C++ 0x 之左值与右值、右值引用、移动语义、传导模板(转载)
- C++左值引用和右值引用
- C++引用(左值引用,右值引用)
- C++左值右值引用
- C++中左值与右值引用———C++Primer读书笔记
- 深入理解(实例) -- c++ 右值引用 左值引用
- C++ 0x 之左值与右值、右值引用、移动语义、传导模板
- C++ 左值、右值、右值引用
- C++ 11中的左值引用和右值引用
- [C++] 左值、右值、右值引用
- c++ 11 移动语义、std::move 左值、右值、将亡值、纯右值、右值引用
- C++ 左值、右值、右值引用
- C++ 左值、右值、右值引用
- C++ 11 左值,右值,左值引用,右值引用,std::move, std::foward
- c++ 左值、右值、左值引用和右值引用
- 关于c++右值与左值引用
- C++ 0x 之左值与右值、右值引用、移动语义、传导模板
- C++ 0x 之左值与右值、右值引用、移动语义、传导模板