What does ref means

malio youdontwanttoknow at unknown.com
Tue Sep 6 03:53:55 PDT 2011


== Auszug aus bearophile (bearophileHUGS at lycos.com)'s Artikel
> malio:
> > I'm a bit confused what exactly ref means and in which cases I definitely need this keyword.
> ref is not too much hard to understand. This is a simple usage example:
> import std.stdio;
> void inc(ref int x) {
>     x++;
> }
> void main() {
>     int x = 10;
>     writeln(x);
>     inc(x);
>     writeln(x);
> }
> It is almost syntax sugar for:
> import std.stdio;
> void inc(int* x) {
>     (*x)++;
> }
> void main() {
>     int x = 10;
>     writeln(x);
>     inc(&x);
>     writeln(x);
> }
> But a pointer can be null too.
> Beside allowing that mutation of variables, in D you are allowed to use "const ref" too (or immutable ref), this is useful if your value is many bytes long,
to avoid a costly copy:
> import std.stdio;
> struct Foo { int[100] a; }
> void showFirst(const ref Foo f) {
>     writeln(f.a[0]);
> }
> void main() {
>     Foo f;
>     f.a[] = 5;
>     showFirst(f);
> }
> Another use for ref is on the return argument:
> import std.stdio;
> struct Foo {
>     double[3] a;
>     ref double opIndex(size_t i) {
>         return a[i];
>     }
> }
> void main() {
>     Foo f;
>     f.a[] = 5;
>     writeln(f.a);
>     f[1] = 10;
>     writeln(f.a);
> }
> Bye,
> bearophile

Okay, thanks bearophile. But I currently doesn't exactly understand what's the difference between "ref" and "const ref"/"immutable ref". If "ref" is syntactic
sugar for pointers only (like your first example), does it also create a copy of the parameters which are marked as "ref"? I thought that pointers (and in
this context also "ref") avoid the creation of costly copies?!?

Thanks!


More information about the Digitalmars-d-learn mailing list