为了账号安全,请及时绑定邮箱和手机立即绑定

为什么非const引用临时对象?

为什么非const引用临时对象?

C++
温温酱 2019-08-19 14:32:59
为什么非const引用临时对象?C ++只允许将临时对象分配给const引用。它不允许分配临时对象来引用。例如:String& a = String("test");         // Errorconst String& a = String("test");   // Ok无论我到哪里谷歌这个结果,我只看到以下答案修改临时对象会导致无法识别的问题修改临时对象很危险在某些时候,你会忘记它是一个临时变量有人说,临时对象在声明后消失了。所以你不应该修改它。如果C ++,如此热衷于阻止修改临时对象,它应该阻止读取临时对象吗?如果临时对象消失了,那么从那里读取内容是没有意义的吗?权利可能发生的可能情况也可能涉及阅读。那为什么它一直阻止写入并允许读取?请给我一个可靠的c ++代码说明。请不要通过指出一些替代方案来偏离问题。请给我一个可靠的答案代码,为什么const int&被允许,int&不允许用于临时对象。一个说&&在那里..我的问题不同..另一个说,改变不会反映..改变也不会反映即使它也是const int&。例如:双倍; Const int&i = a; 一个++; 不会影响我..
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

不允许引用临时值的原始案例是函数参数。假设这是允许的:


void inc(double& x)

{ x += 0.1; }


int i = 0;

inc(i);

为什么不i改变?


查看完整回答
反对 回复 2019-08-19
?
墨色风雨

TA贡献1853条经验 获得超6个赞

如果你有一个复制成本非常高的临时对象,你可能更喜欢将一个const&对象(比如一个函数返回)取而代之,而不是将它复制到另一个变量中以便以后使用。只要引用存在,对临时的持续引用会延长该临时的生命,允许您访问任何可读状态。

写入是不允许的,因为只要你想改变一个变量,你也可以拥有一个真实的实例而不是一个仅作为非const引用别名的临时实例。


查看完整回答
反对 回复 2019-08-19
  • 3 回答
  • 0 关注
  • 487 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信