[C++]引用参数与临时变量

本文探讨了C++中引用参数与临时变量的关系,解释了何时会创建临时变量及为何需要添加const限定符。同时介绍了左值的概念,并讨论了在函数调用期间临时变量的有效范围。
对于引用参数,什么情况下会产生临时变量了?有两种情况:

1、当传入的实际参数类型正确,但不是左值
2、当传入的实际参数类型不匹配,但可以转换为正确的类型
临时变量的有效区间在函数调用阶段。

C++为什么对于产生临时变量的引用参数要加const?
看看这个例子
void swap(int & a, int & b)
{
    int tmp;
    tmp = a;
    a = b;
    b = tmp;
}
long a = 3, b = 5;
swap(a, b);

对于上述代码,有类型不匹配,按照前面的原因,是应该产生临时变量的,但如果产生临时变量,是与swap的设计初衷相违背的,a和b实际是不会交换的,怎样处理这种矛盾。C++选择必须在有const的情况下才能产生临时变量,因此上述代码实际是不能编译通过的。而一旦void swap(int & a, int & b)修改为void swap(const int & a,  const int & b),调用部分编译没有问题,只是函数内修改a和b的代码不能编译通过,因为被声明为const了,当然这是另外一个层面的问题了。
当引用参数前有了const后,我们知道函数不会修改参数值,我们也不会关心到底有没有参数临时变量。


注:
什么是左值:就是可以通过地址引用的数据对象,例如变量、数组元素、结构体成员,引用,解引用的指针等。
非左值:包括字符常量(双引号包含的字符串),表达式
左值在过去指的是能够位于赋值操作符左边,但const引入后,这种定义就不准确了。但const变量因为可以通过地址引用,因此也是一种左值,即不能改变的左值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值