why local variables cannot be ref?

Fanda Vacek fanda.vacek at gmail.com
Mon Nov 25 20:47:52 UTC 2019


On Monday, 25 November 2019 at 09:00:49 UTC, Dukc wrote:
> On Monday, 25 November 2019 at 03:07:08 UTC, Fanda Vacek wrote:
>> Is this preferred design pattern?
>>
>> ```
>> int main()
>> {
>> 	int a = 1;
>> 	//ref int b = a; // Error: variable `tst_ref.main.b` only 
>> parameters or `foreach` declarations can be `ref`
>> 	ref int b() { return a; }
>> 	b = 2;
>> 	assert(a == 2);
>> 	return 0;
>> }
>> ```
>>
>> Fanda
>
> It's okay, but I'd prefer an alias, because your snippet uses 
> the heap needlessly (it puts variable a into heap to make sure 
> there will be no stack corruption if you pass a pointer to 
> function b() outside the main() function)

Yes alias can help, but my original need was like

void main() @safe
{
	int[] a = [1, 2];
	alias head = a[0];
	head = 2;
	assert(a[0] == 2);
}

there the alias doesn't work

Fanda


More information about the Digitalmars-d-learn mailing list