Code security: "auto" / Reason for errors

Jacob Carlborg via Digitalmars-d digitalmars-d at puremagic.com
Wed Mar 2 23:20:57 PST 2016


On 2016-03-02 20:42, Ozan wrote:
> Hi
>
> I despair of "auto var1 = var2"for arrays. Isn't it a open door for
> errors. Example
>
> import std.stdio;
>
> void main()
> {
>      int[] a;
>      foreach(i; 0..10) a ~= i;
>      auto b = a; // correct dlang coding: auto b = a.dup;
>
>      a[2] = 1;
>      b[2] = 5; // Overwrites assignment before
>      writeln(a);
>      writeln(b); // Always a == b but developer would like to have (a != b)
> }
>
> The behaviour is different to other non-container datatypes.
> So in a first view, it looks like a data copy but it's only a pointer copy.

Depending on your needs you can make the array const, or immutable:

void main()
{
     const(int)[] a;
     foreach(i; 0..10) a ~= i;
     auto b = a;

     a[2] = 1; // does not compile
     b[2] = 5; // does not compile
}

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list