Re: rvalues and lvalues
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi!
Am 08.12.11 18:25, schrieb Daniel Kr??gler:
On 2011-12-07 23:40, Frank Birbacher wrote:
Questions:
1. Why does the latter not call itself?
Because x is an lvalue!
Am 08.12.11 18:26, schrieb Andrzej Krzemie??ski:
This has to do with the nature of rvalue references. Rvalue reference
(in our case: x) binds to rvalues, but it is itself an lvalue. A named
reference (even an rvalue reference) is an lvalue. Therefore
expression x << y picks an lvalue overload.
Ah, I see. The point I was missing is: it's not all about the type of x,
but actually about the static property of the expression involved. Now
that I lost my misconception everything fits together.
Am 08.12.11 18:25, schrieb Daniel Kr??gler:
Consider:
void foo(std::vector&& x) {
std::vector y = x; // Assume this would move the contents
// of x into y...
if (x.size() > 2) { .. } // x is used as if it where unchanged..
};
This is the typical "auto_ptr-gotcha" problem!
[snip]
void foo(std::vector&& x) {
std::vector y = std::move(x); // Yes, I want to modify x!
For assigning the rvalue reference I expected a move to occur. The
std::move looked redundant to me. Now I see the need. It's not there to
change the type of x, but to turn it into an rvalue expression.
2. Should the latter one read:
return std::move(x<< y);
?
Yes, this is correct. The expression "x << y" is an lvalue and applying
std::move to it in this case ensures move semantics for the return
statement.
Ok, I guess today I have successfully used this technique to correctly
return a unique_ptr member variable from a member function.
Am 08.12.11 18:26, schrieb Andrzej Krzemie??ski:
BTW, here is the post where I tried to explain some aspects of rvalues
and lvalues:
http://akrzemi1.wordpress.com/2011/11/09/lvalues-rvalues-and-references/
Great, I've read both your article and Bjarne's.
Thank you both!
Frank
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.12 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAk7hCmgACgkQhAOUmAZhnmo9SgCfRzZilRZMZhZZoUTV8xGOf7SZ
l+4AnRj1D7iU58Vb9Yjqjkr6SPG6bC1a
=bsoO
-----END PGP SIGNATURE-----
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]