Re: Temporaries
On Aug 12, 6:17 pm, Prasoon <prasoonthegr...@gmail.com> wrote:
Are all temporaries in C++ "rvalues"?
Maybe:-). The standard doesn't really define "temporary
object", although it uses the term a lot, in sometimes more or
less contradictary ways. Note that =A712.2 starts out by saying
that "Temporaries of class type are created in various contexts:
[...] throwing an exception [...]. Since the value thrown can
bind to a non-const reference, I don't think it is an rvalue.
But most uses tend to more or less equate the two, and most
programmers tend to think of the two as identical.
Strictly speaking, I think a temporary is any object without a
name, where as an rvalue is the result of certain types of
expressions. The definition of rvalue is tied up with
expressions, and the rvalue/lvalue distinction is only defined
for the results of an expression. Most of the time, the two
coincide, at least for objects (references are a different
matter---a reference is always an lvalue, even if it doesn't
have a name, and even if its lifetime corresponds to that of a
temporary).
According to me "yes".
Am I right?
In everyday use, more or less.
However consider the following code.
#include <iostream>
int a;
int& foo()
{
return a;
}
int main()
{
foo()=6;
}
Is there any temporary created in the above code?
Yes. The expression 6 is a temporary.
According to me "no" there isn't any.
It depends on your definition of a "temporary".
foo() returns just a reference to "a" (and no temporary
created). Correct me if I am wrong.
Again, it depends on your definition of "temporary". The
reference itself has temporary lifetime, but it is an lvalue.
If you consider such references as "temporaries", then you have
a temporary that is an lvalue. If you don't, then you have an
lvalue, but no temporary. In any case, you don't have a
temporary object (since references aren't objects).
The standard doesn't really say, and there are several ambiguous
cases: temporaries live until the end of the full expression
which creates them (references would be temporaries---but
there's not, as far as I know, anyway to see this lifetime in a
conforming program), but references are always lvalues.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34