說我有:延長臨時一生 - 有道
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