rvalue references

Manu turkeyman at gmail.com
Tue Apr 23 20:41:05 PDT 2013


>
>
> On 24 April 2013 11:02, Diggory <diggsey at googlemail.com> wrote:
>
>> On Wednesday, 24 April 2013 at 00:54:12 UTC, kenji hara wrote:
>>
>>> 2013/4/24 Manu <turkeyman at gmail.com>
>>>
>>>  "The r-value being passed is assigned to a stack allocated temporary,
>>>> which has a lifetime that is identical to any other local variable, ie,
>>>> the
>>>> lifetime of the function in which it appears."
>>>> There, I defined it.
>>>>
>>>>
>>> Good definition. If add more,
>>> "getting address of "scope" parameter would be disallowed, at least in
>>> @safe code, because it would be regarded as the escape of stack allocated
>>> temporary."
>>>
>>> Kenji Hara
>>>
>>
>> Why does the temporary need to exist any longer than the current
>> statement? (the current lifetime of temporaries are the statement or
>> expression). Surely any longer is just wasting stack space.
>
>
scope ref a(scope ref int x) { return x; }
void b(scope ref int x);

b(a(10));

The temp produced from '10' needs to last longer than a(), because it can
be returned to b(). Ie, the temp needs the life of any normal local
declared within that scope.

How do you describe 'wasting' stack space? Does D attempt to recycle stack
space from previous short-lived locals within a single function?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20130424/92e53b7f/attachment.html>


More information about the Digitalmars-d mailing list