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