引用的工作用法

引用的工作用法

在C到C++,取地址符&的右值到左值出现,在理解中都是地址的概念。
C中&指向内存的地址,而C++则是别名的一个内存地址(对象本身的地址).
右值(非左值)通常指字面常量(用引号括起的字符串除外,它们由地址表示)和包括多项的表达式。
左值是可被引用的数据对象,比如(变量,数组元素,结构成员,引用和解除引用的指针都是左值),现在还加上const变量。

对于不想被修改的对象数据,可用const处理。
引用只能在定义时被初始化一次,之后不可变。这一点与指针不同。
引用不能为空,指针可以为空。
引用的声明操作:类型标识符:&引用名=变量名
举例:
string input;
string copy;
string result;
result = version1(iput,"***");
string version1(const string & s1, const string & s2)
{
string temp;
temp = s2 + s1 + s2;
return temp;
}
函数返回的值被复制到一个临时变量的内存地址,由于是string类型,所以result接收了这个地址,相当于存储了这个内存块。(左值是变量 = 右值是字符串)当然,函数调用的时候,这个函数执行完会被回收。
result = version2(iput,"
**");
const string &version2( string & s1, const string & s2)
{
s1 = s2 + s1 + s2;
return s1;
}
函数返回值是一个字符串,也是string类型,result同样也接收了这个内存块的地址,但是,这个函数的s2,是被const的,里面的值并没用被修改,所以属于深拷贝的一个范畴(另外一个知识点)。(左值result变量 = 右值字符串地址)。函数调用完,这个函数也会被回收,但是函数变量的地址已经被引用。
result = version3(iput,"***");
const string &version3( string & s1, const string & s2)
{
string temp;
temp = s2 + s1 + s2;
return temp;
}
和例子1相似。返回的是字符串,存储在临时变量的一个地址,但是引用对象却是一个空(注意:例子1,是一个指针的地址,现在这个例子是引用对象的地址)。左值rerult = 右值变量&version3(空?)。函数调用完就被回收。引用不能为空,指针可以为空。

(转载) 何时使用引用参数
使用引用参数的主要原因有两个:
1)程序员能够修改调用函数中的数据对象;
2)通过传递引用而不是整个数据对象,可以提高程序的运行速度。
当数据对象较大时(如结构和类对象),第二个原因最重要。

对于使用传递的值而不作修改的函数:
1.如果数据对象很小,如内置数据类型或小型结构,则按值传递。
2.如果数据对象是数组,则使用指针,因为这是唯一的选择,并将指针声明为指向const的指针。
3.如果数据对象是较大的结构,则使用const指针或const引用,以提高程序的效率。可以节省复制结构所需的时间和空间。
4.如果数据对象是类对象,则使用const引用。传递类对象参数的标准方式是按引用传递。

对于修改调用函数中数据的函数:
1.如果数据对象是内置数据类型,则使用指针。
2.如果数据对象是数组,则只能使用指针。
3.如果数据对象是结构,则使用引用或指针。
4.如果数据对象是类对象,则使用引用。

原文:https://blog.csdn.net/hydz8023/article/details/85232638
如有侵犯原文作者的利益,请联系,删帖处理。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值