Re: reference to non-const temporary
samee.zahur@gmail.com (Samee Zahur) wrote (abridged):
void add_one( long& x ) { x = x + 1; }
Actually, I've seen this topic come up on this group a number of times,
and this same rationale being posted a number of times. But this
problem can only occur when there is an implicit conversion going on.
Why not just disable implicit conversion whenever initializing a
non-const ref with a temporary? That way an int temporary could be
assigned to int& but not long&
Yes, I'm pretty sure I've posted similar comments before. What seems to
have happened is that the gurus have instead pursued the path of providing
a new kind of reference that can bind to non-const temporaries, using the
"&&" syntax. Thus:
void add_one( long &&x ) { ++x; }
The advantage, as I understand it, is that with both overloads the
programmer /knows/ whether x is bound to a temporary or a variable. He or
she can use this knowledge to make the function more efficient - by not
bothering to fill in the return value, and/or reusing the object passed
for the function's own purposes instead.
The disadvantage, again as I understand it, is that it opens up the
implicit conversion issue again. In effect by using && references you are
saying you are prepared to live with the danger. Could any of the people
supporting the l-value reference proposal confirm whether this issue
remains?
-- Dave Harris, Nottingham, UK.
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]