On 7/11/16 10:33 AM, Bahman Movaqar wrote:
On 07/11/2016 06:30 PM, Steven Schveighoffer wrote:
But passing empty AA by value sometimes can be surprising. I'm not sure
if it will work.

Could you elaborate more?

An AA initializes on demand. So if you pass by value *after* it has been initialized it behaves like a reference type. But before it's initialized, it's essentially a null pointer. This can cause surprising behavior:

foo(int[int] aa)
{
    foreach(i; 0 .. 100)
        aa[i] = i;
}

void main()
{
    import std.random;
    int[int] aa; // initialized as null
    if(uniform!ubyte < 128)
        aa[0] = 0; // intialized
    foo(aa);

// at this point, depending on random initialization, either aa is filled or is still null.
}

-Steve

Reply via email to