说我有:延长临时一生 - 有道
f(T& t){ ... }
,我有时想为提供的参数从函数调用
T GetT() { ... }
这样的:
f(GetT())
尽管我确信T
的生命周期一直持续到expr结束ssion,我也不能将T&
更改为const T&
,因为我需要修改f
中的对象。
我想过使用T&&
但后来当我碰巧有T
左值我需要move()
它,这将使其尴尬,因为我有时需要调用f
后使用T
。在我的情况下,T
是普通的旧数据,所以我想它会起作用,但移动对象并在之后使用它并不合适。
有没有一种优雅的方法可以让函数将rval和lval引用都变为可变对象?
ATM我只是在做
T t = GetT();
f(t);
这我觉得至少是一个无用线和T
一个无用的副本。
将f(T&t){...}改为f(T t){...}' –
您无法将rvalue绑定到非const左值引用的原因是阻止您修改即将超出范围的对象。 –
@RichardCritten这会造成多余的副本。另外,我无法观察到在T上做出的更改。 – user1316208