why std.stdio.File is a struct?
Namespace via Digitalmars-d
digitalmars-d at puremagic.com
Sun Oct 23 03:15:33 PDT 2016
On Sunday, 23 October 2016 at 06:36:21 UTC, Jonathan M Davis
wrote:
> You can mark a parameter as ref, and you get something similar
> to C++'s &, except that it only works on parameters, return
> types, and the variable for the current element in a foreach
> loop (you can't declare local variables that are ref), and ref
> parameters only ever accept lvalues, even if they're const. e.g.
>
> void foo(ref int i) {...}
>
> ref int bar() { return _i; }
>
> foreach(i, ref e; arr) {...}
>
> I think that most D code just passes structs around without
> worrying about the cost of copying unless the struct is
> particularly large or profiling has shown that copying it is
> too expensive. For a lot of stuff, it simply isn't a problem.
> And when it is, there's ref, or the struct can be put on the
> heap and passed around by pointer. But because we don't have an
> equivalent for const& that accepts rvalues, using ref simply to
> avoid copying can get annoying. So, it doesn't make much sense
> to do it unless it's actually necessary (whereas a lot of C++
> code does it just in case it matters).
>
> There is talk of possibly adding a way to pass rvalues by ref
> in D, in which case, you would get something similar to C++
> const&, but there are problems caused by C++'s approach that we
> don't want in D, and D's const is enough more restrictive than
> C++ const that whatever we do can't be tied to const.
>
> - Jonathan M Davis
There is still the way to use an universal rvalue => lvalue
conversion function.
More information about the Digitalmars-d
mailing list