c++ 左值引用和右值引用

  1. 引用
1.1 引用是变量 | 对象的别名,操作引用等同于操作原有对象|变量。
1.2 使用引用的时候,必须先初始化,否则会报错。
1.3 引用不会开辟新的内存空间,没有内存地址。
引用相当于是外号,并不会产生全新的实体,所以不会开辟新的空间,操作引用等同于操作原有的对象实体。

使用引用:

int num = 24;
int &n = num;
n = 36;
std::cout << "num : " << num << std::endl;

引用声明必须先初始化,否则会报错,因为有了原有变量,才有原有变量的引用。

Declaration of reference variable 'n1' requires an initializer
int & n1;

指针也可以有引用

int * ps  = &num;
int * &psr = ps;

数组没有引用,因为数组是一堆数的集合,但是数组中的元素是有引用的。

int array[]{1,2,3};
//int[3] & psa = array;
int & psa1 = array[0];
psa1 = 11;
std::cout << "array[0] : " << array[0] << std::endl;

#后台输出:
array[0] : 11
  1. 左值和右值
2.1 赋值表达式左边的一定是左值,右值只能出现在等号右边,左值可以出现在左边也可以出现在右边
2.2 判断是否是左值还是右值,就看能否取地址,如果能取地址,就是左值,否则就是右值
2.3 一般来说,变量 | 对象 大多数都是左值,而数值 | 运算的表达式 |  函数的返回值 大多数都是右值。
int getNum(){
    int num = 12;
    return num;
}

int num  = 24;                  // num :  左值,        24:右值
int num1 = num;                 // num1:  左值,       num:左值
int num2 = num + 12;            // num2:  左值,  num + 12:右值
int num3 = getNum();            // num3:  左值,  getAge():右值
  1. 左值引用和右值引用
左值引用
左值引用是引用名前面加一个符号 & 来表示。
左值引用只能接受左值。
左值引用加上关键字 const,也可以接收右值。
int num  = 24;                  // num :  左值,         24:右值
int &num1 = num;                 // num1:  左值引用,     num:左值
const int & num2 = 36;            // num2:  左值引用,    36:右值
const int & num3 = num;            // num3:  左值引用,   num:左值

const int & 引用名,应用名就不能修改原变量的值。

 右值引用
右值引用只能接受右值。
右值引用是引用名前面加一个符号 && 来表示。
int num = 24 ;      // num : 左值        24: 右值
int && num1 = 36 ;  // num1 :右值引用 ,  36: 右值
  1. 应用场景
#include <iostream>


int cal_add1(int a, int b){
    return a + b;
}
int cal_add2(int & a, int b){
    return a + b;
}
int cal_add3(int & a, int & b){
    return a + b;
}
int cal_add4(int && a, int && b){
    return a + b;
}
int cal_add5(const int & a, const int & b){
    return a + b;
}

int main() {
    
    int a = 12;
    int b = 24;
    
    std::cout << cal_add1(12,24) << std::endl;
    std::cout << cal_add1(a,b) << std::endl;
    
    std::cout << cal_add2(a,24) << std::endl;
    std::cout << cal_add2(a,b) << std::endl;
    
    std::cout << cal_add3(a,b) << std::endl;
    
    std::cout << cal_add4(12,24) << std::endl;
    
    std::cout << cal_add5(a,b) << std::endl;
    std::cout << cal_add5(12,24) << std::endl;

    return 0;
}

clion 有函数参数类型提示:
在这里插入图片描述

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值