IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++ 左值引用和右值引用 -> 正文阅读

[C++知识库]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 有函数参数类型提示:
在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:22:53  更:2022-04-18 17:26:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:14:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码