Blog post: What D got wrong
Rubn
where at is.this
Wed Dec 19 23:10:34 UTC 2018
On Wednesday, 19 December 2018 at 19:58:53 UTC, Neia Neutuladh
wrote:
> On Wed, 19 Dec 2018 17:28:01 +0000, Vijay Nayar wrote:
>> Could you please elaborate a little bit more on this? In the
>> linked program, I had expected that "ref" would return a
>> reference to "a" that would behave similar to a pointer.
>
> They work like pointers that automatically dereference when
> assigning to the base type.
>
> Only three things in D can be ref:
> * A function parameter
> * A function return value
> * A foreach variable (since that's either going to be a
> function return
> value, a function parameter, or a pointer, depending on what
> you're
> iterating over)
>
> So when the compiler sees something like:
>
> ref int foo();
> auto a = foo();
>
> It sees that the type of 'a' has to be the same as the return
> type of 'foo'. Except that's not possible, so it uses the
> nearest equivalent type: int.
>
> And if you have:
>
> ref int foo();
> int a = foo();
>
> That obviously converts by copying the value.
To be fair even in c++ this won't be a reference.
int& foo();
auto a = foo(); // a == int
auto& a = foo(); // a == int&
So it shouldn't be that surprising.
More information about the Digitalmars-d-announce
mailing list