首页 > 编程语言 >C++ 把引用作为返回值

C++ 把引用作为返回值

时间:2024-03-01 21:44:59浏览次数:25  
标签:返回 int C++ 引用 vals 返回值 ref

通过使用引用来替代指针,会使 C++ 程序更容易阅读和维护。C++ 函数可以返回一个引用,方式与返回一个指针类似。

当函数返回一个引用时,则返回一个指向返回值的隐式指针。这样,函数就可以放在赋值语句的左边。例如,请看下面这个简单的程序:

 1 #include <iostream>
 2  
 3 using namespace std;
 4  
 5 double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
 6  
 7 double& setValues(int i) {  
 8    double& ref = vals[i];    
 9    return ref;   // 返回第 i 个元素的引用,ref 是一个引用变量,ref 引用 vals[i]
12 }
13  
14 // 要调用上面定义函数的主函数
15 int main ()
16 {
17  
18    cout << "改变前的值" << endl;
19    for ( int i = 0; i < 5; i++ )
20    {
21        cout << "vals[" << i << "] = ";
22        cout << vals[i] << endl;
23    }
24  
25    setValues(1) = 20.23; // 改变第 2 个元素
26    setValues(3) = 70.8;  // 改变第 4 个元素
27  
28    cout << "改变后的值" << endl;
29    for ( int i = 0; i < 5; i++ )
30    {
31        cout << "vals[" << i << "] = ";
32        cout << vals[i] << endl;
33    }
34    return 0;
35 }

结果:

改变前的值
vals[0] = 10.1
vals[1] = 12.6
vals[2] = 33.1
vals[3] = 24.1
vals[4] = 50
改变后的值
vals[0] = 10.1
vals[1] = 20.23
vals[2] = 33.1
vals[3] = 70.8
vals[4] = 50

当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。

1 int& func() {
2    int q;
3    //! return q; // 在编译时发生错误
4    static int x;
5    return x;     // 安全,x 在函数作用域外依然是有效的
6 }

 

标签:返回,int,C++,引用,vals,返回值,ref
From: https://www.cnblogs.com/uacs2024/p/18048018

相关文章

  • C++ 类的内存布局
    基类类内成员的内存分布常见类内成员大致分为:类内变量、类内函数、静态变量、虚函数等,内存分布遵循:所有成员会按照声明的顺序布局类内成员会进行大对齐类内函数不占用类的内存,存储在代码区静态变量不占用类的内存,存储在全局/静态区所有虚函数共用一个虚函数表指针,虚函数表......
  • C++ 把引用作为参数
    1#include<iostream>2usingnamespacestd;34//函数声明5voidswap(int&x,int&y);67intmain()8{9//局部变量声明10inta=100;11intb=200;1213cout<<"交换前,a的值:"<<a<<en......
  • C++ 从函数返回指针
    C++允许从函数返回指针,必须声明一个返回指针的函数:int*myFunction()C++不支持在函数外返回局部变量的地址,除非定义局部变量为static变量。1#include<iostream>2#include<ctime>3#include<cstdlib>4 5usingnamespacestd;6 7//要生成和返回随......
  • C++ 指针 vs 数组
    指针和数组并不是完全互换的1#include<iostream>23usingnamespacestd;4constintMAX=3;56intmain()7{8intvar[MAX]={10,100,200};910for(inti=0;i<MAX;i++)11{12*var=i;//这是正确的语法13......
  • EndNote 21:文献整理与引用,一键轻松搞定 mac/win版
    EndNote21是一款功能强大的文献管理软件,专为学术研究者、学生和教师设计。它提供了全面的文献管理解决方案,帮助用户轻松整理、引用和分享学术文献。→→↓↓载EndNote21mac/win版EndNote21拥有直观的用户界面和强大的文献检索功能,用户可以轻松地从各种数据库和在线资源中导......
  • C++类开发第五篇(继承和派生的初体验)
    inheritance在C++中,继承是一种面向对象编程的特性,允许一个类(称为子类或派生类)从另一个类(称为基类或父类)那里继承属性和行为。通过继承,子类可以获得父类的数据成员和成员函数,从而可以重用父类的代码并扩展其功能。这样可以提高代码的复用性和可维护性,同时也符合面向对象编程的封......
  • C++static 存储类
    1#include<iostream>23//函数声明4voidfunc(void);56intmain()7{8intcount=10;9while(count--)10{11func();12std::cout<<",变量count为"<<count<<std::endl;13......
  • (持续更新)c++指针
    空指针和野指针1.空指针定义:指针变量指向内存中编号为0的空间用途:初始化指针变量注意:空指针指向的内存是不可以访问的   2.野指针   const修饰指针1.const修饰指针constint*p=&a;图中:*p=20;错误,指针指向的值不可以改p=&b;正确,指针的指向可以改 (常量......
  • faster-fifo:C++实现的python多进程通信队列 —— 强化学习ppo算法库sample-factory的C
    项目地址:https://github.com/alex-petrenko/faster-fifo需要注意,该项目给出了两种安装方法,一种是pip从pypi官网安装,一种是从GitHub上的源码安装;经过测试发现这个项目维护程度较差,因此pypi官网上的项目比较落后,因此不建议使用pypi上的安装,而是进行源码编译安装。给出源码编......
  • dbus-c++/dbus.h:没有那个文件或目录
    dbus-c++/dbus.h:没有那个文件或目录作者:Linux服务器开发栏目:公开2023-10-2612:38160如果你在使用dbus-c++时遇到了”dbus.h:没有那个文件或目录”的错误,这可能是因为你的编译环境缺少DBus开发库。要解决这个问题,你需要安装DBus开发库。根据你所用的操作系统不同,具体步骤可......