C++ 引用作为返回值

返回上一级

函数也可以返回一个引用,方式与返回一个指针类似,通常的做法是使用引用替代指针

double nums[] = {11.11, 12.58, 12.21, 25.25, 88.8};

double& setNum( int i )
{
    return nums[i];   // 返回第 i 个元素的引用
}

当函数返回一个引用时,返回的是一个指向返回值的隐式指针

因此,我们可以把返回引用的函数作为左值,例如

setNum(1) = 203.302;

有点意思吧,我们写一个小范例试一试

/**
 * file: main.cpp
 * author: 简单教程(www.twle.cn)
 *
 * Copyright © 2015-2065 www.twle.cn. All rights reserved.
 */

#include <iostream>

double nums[] = {11.11, 12.58, 12.21, 25.25, 88.8};

double& setNum( int i )
{
    return nums[i];   // 返回第 i 个元素的引用
}

int main ()
{

    std::cout << "改变前的值" << std::endl;
    for ( int i = 0; i < 5; i++ )
    {
       std::cout << "nums[" << i << "] = ";
       std::cout << nums[i] << std::endl;
    }

   setNum(1) = 203.302;  // 改变第 2 个元素
   setNum(3) = 708.807;  // 改变第 4 个元素

   std::cout << "改变后的值" << std::endl;
   for ( int i = 0; i < 5; i++ )
    {
        std::cout << "nums[" << i << "] = ";
        std::cout << nums[i] << std::endl;
    }

    return 0;
}

编译和运行以上范例,输出结果如下

改变前的值
nums[0] = 11.11
nums[1] = 12.58
nums[2] = 12.21
nums[3] = 25.25
nums[4] = 88.8
改变后的值
nums[0] = 11.11
nums[1] = 203.302
nums[2] = 12.21
nums[3] = 708.807
nums[4] = 88.8

注意事项

  1. 当返回一个引用时,被引用的对象不能超出作用域

    返回一个对局部变量的引用是不合法的,

    int& func() {
       int q;
       return q;  // 在编译时发生错误
    }
    
  2. 可以返回一个对静态变量的引用

    int& func() {
    
       static int x;
       return x;     // 安全,x 在函数作用域外依然是有效的
    }
    

返回上一级

C++ 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.