当前位置: 首页 > article >正文

C++ 引用的基本用法

通过使用引用,可以创建该对象的另一个名字,而不会引入额外的内存开销。引用在函数参数传递、返回值以及避免拷贝大型对象时特别有用。

引用的基本用法

创建引用

引用必须在创建时被初始化,且一旦被绑定到一个对象后,就不能再改变为引用其他对象。

int a = 10;
int& ref = a;  // ref 是 a 的引用

通过引用访问对象

使用引用就像使用被引用的对象本身一样。

ref = 20;  // 相当于 a = 20
cout << a << endl;  // 输出 20
cout << ref << endl;  // 输出 20

引用常见用途

函数参数

 使用引用作为函数参数,可以避免拷贝大型对象,同时允许函数修改传入的对象。

void modifyValue(int& x) {
    x = 5;
}

int main() {
    int a = 10;
    modifyValue(a);
    std::cout << a << std::endl;  // 输出 5
    return 0;
}

函数返回值

使用引用作为函数返回值时,可以避免返回大型对象的拷贝,但需要注意避免悬挂引用(dangling reference)。

int& findValue(int arr[], int size, int value) {
    for (int i = 0; i < size; ++i) {
        if (arr[i] == value) {
            return arr[i];
        }
    }
    // 注意:这里需要处理找不到值的情况,否则会返回悬挂引用
    static int notFound = -1;
    return notFound;
}

int main() {
    int arr[] = { 1, 2, 3, 4, 5 };
    int& ref = findValue(arr, 5, 3);
    cout << ref << endl;  // 输出 3
    return 0;
}

悬挂引用:返回局部变量的引用会导致悬挂引用,因为局部变量在函数返回后会被销毁。

常量引用 

使用常量引用作为函数参数可以避免拷贝(值传递),同时保证被引用的对象不会在函数中被修改。

void printValue(const int& x) {
    std::cout << x << std::endl;
}

int main() {
    int a = 10;
    printValue(a);
    return 0;
}

http://www.kler.cn/a/445012.html

相关文章:

  • 批量DWG文件转dxf(CAD图转dxf)——c#插件实现
  • 深入了解Bootstrap:打造响应式网站的利器
  • CH340系列芯片驱动电路·CH340系列芯片驱动!!!
  • 电商数据采集电商,行业数据分析,平台数据获取|稳定的API接口数据
  • 使用Python从阿里云物联网平台获取STM32温度数据
  • elasticsearch 7.6.2版本即使使用wildcard模糊查询,也毫无过滤效果分析
  • 403 Forbidden HTTP 响应状态码
  • 大模型在研发提效方面的实践(附最佳实践资料)
  • uniapp自定义树型结构数据弹窗,给默认选中的节点,禁用所有子节点
  • electron 顶部的元素点不中,点击事件不生效
  • 模组 RG500Q入网问题分析
  • 用python写一个接口
  • 【中间件介绍及案例分析】
  • 回归预测 | MATLAB实现CNN-BiLSTM卷积神经网络结合双向长短期记忆神经网络多输入单输出回归预测
  • 探索 AnythingLLM:借助开源 AI 打造私有化智能知识库
  • 计算机工作流程
  • Linux dnf 包管理工具使用教程
  • 在linux系统的docker中安装GitLab
  • 三维引擎cesium学习经验
  • 增强现实(AR)和虚拟现实(VR)的应用
  • 使用 esrally race 测试 Elasticsearch 性能:实践指南
  • halcon单相机+机器人*眼在手外标定心得
  • Maven 插件详解
  • 将3D模型转换为Babylon格式
  • SSM 架构中 JAVA 网络直播带货查询系统设计与 JSP 有效实现方法
  • 2025.01.15python商业数据分析top2