C++教程
+ -

C++ 把引用作为返回值

2019-09-09 3 1

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

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

#include <iostream>
using namespace std;
double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
double& setValues( int i )
{
  return vals[i];   // 返回第 i 个元素的引用
}
// 要调用上面定义函数的主函数
int main ()
{
   cout << "改变前的值" << endl;
   for ( int i = 0; i < 5; i++ )
   {
       cout << "vals[" << i << "] = ";
       cout << vals[i] << endl;
   }
   setValues(1) = 20.23; // 改变第 2 个元素
   setValues(3) = 70.8;  // 改变第 4 个元素
   cout << "改变后的值" << endl;
   for ( int i = 0; i < 5; i++ )
   {
       cout << "vals[" << i << "] = ";
       cout << vals[i] << endl;
   }
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

改变前的值
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

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

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

0 篇笔记 写笔记

C++ 指针vs数组
指针和数组是密切相关的。事实上,指针和数组在很多情况下是可以互换的。例如,一个指向数组开头的指针,可以通过使用指针的算术运算或数组索引来访问数组。请看下面的程序:#include using namespace std;const int MAX = 3;int ma......
Perl 引用
引用就是指针,Perl 引用是一个标量类型可以指向变量、数组、哈希表(也叫关联数组)甚至子程序,可以应用在程序的任何地方。创建引用定义变量的时候,在变量名前面加个,就得到了这个变量的一个引用,比如:$scalarref = $foo; # 标量变量引用$arrayref = @ARG......
PHP 函数不定参数和默认参数
PHP作为一门弱化语言,支持c语言类似的不定参数和可选参数,只是格式书写格式不致,如:不定参数:使用函数fun_num_args()获取参数个数,使用fun_get_args()获取参数,指定索引则获取第内个参数,未指定索引指获取所有参数并生成数组返回。
XPath在要与XPath表达式一起使用的节点上定义以下运算符。序号Operator描述 1/用 于选择特定节点下的节点。 2//用 于从根节点选择节点 3[…]用 于检查节点值 4|用 于两个节点集的并集 XPath在要与XPath表达式一起使用的节点上定义以下功能。序号Ope......
函数是一起执行任务的一组语句,每个C程序都有至少一个函数,即 main(),所有最简单的程序都可以定义其他函数函数 declaration 告诉编译器函数的名称,返回类型和参数,函数定义提供函数的实际主体。C标准库提供了程序可以调用的许多内置函数。如, strcat()可以连接两个字符串, mem......
random() 方法返回随机生成的一个实数,它在[0,1)范围内。语法以下是 random() 方法的语法:import randomrandom.random()注 意:random()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。参数无返回值返回随......
atan() 返回x的反正切弧度值。语法以下是 atan() 方法的语法:import mathmath.atan(x)注 意:atan()是不能直接访问的,需要导入 math 模块,然后通过 math 静态对象调用该方法。参数x — 一个数值。返回值返回x的反正切弧度值。实例以下展示了使用 ata......
在本章中,我们将讨论如何添加对库的引用。添加对库的引用就像添加对其他项目的引用,如控制台项目和UWP项目。NuGet 软件包管理器添加对库的引用的一种简便方法。右键单击 StringLibrary(Universal Windows) 项目并选择 管理NuGet程序包 ,如下所示 -在浏览选项卡......
degrees() 将弧度转换为角度。语法以下是 degrees() 方法的语法:import mathmath.degrees(x)注 意:degrees()是不能直接访问的,需要导入 math 模块,然后通过 math 静态对象调用该方法。参数x — 一个数值。返回值返回一个角度值。实例以下展示......
MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP。 在这些语言中,Mysql在PHP的web开发中是应用最广泛。在本教程中我们大部分实例都采用了 PHP 语言。如果你想了解 Mysql 在 PHP 中的应用,可以访问我们的 PHP教程。PHP提供了多种方式来访问和......
有这样一种情况,我需要存储一个用户的姓名,电话,邮箱等各种信息,各种信息都是字符串,那么该怎么能比较高效且内存的使用比较高了?我们可以采用偏移计算的方式:typedef sturct _MY_STURCT{ int totallen; int nameoffset; int add......
您可以先跳过本章,等了解了 C++ 指针的概念之后,再来学习本章的内容。如果您对 C++ 指针的概念有所了解,那么就可以开始本章的学习。数组名是一个指向数组中第一个元素的常量指针。因此,在下面的声明中:double balance[50];balance 是一个指向 &balance[0] ......
ios_event::eof()函数用于检查是否设置了eofbit。 当在与流相关联的序列达到文件结束时,通过所有标准输入操作来设置该标志。声明下面是eof()const函数的声明。bool eof() const;返回值如果设置流的eofbit错误状态标志(表示最后输入操作已经到达文件结束),则返......
如果要将一维数组作为参数传递给函数,则必须以下列三种方式之一声明函数形式参数,并且所有三种声明方法都会产生类似的结果,因为每个都告诉编译器接受一个整数指针。类似地,可以将多维数组作为形式参数传递。方式-1使用指针形式参数如下(在下一章学习指针的用法)。- (void) myFunction(int ......
一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。语法C++ 中 if…else 语句的语法:if(boolean_expression){ // 如果布尔表达式为真将执行的语句}else{ // 如果布尔表达式为假将执行的语句}如果布尔表达式为 tr......
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!