On Thu, 07 Oct 2010 14:43:25 +0000, Benjamin Thaut wrote: > If I want to tell the compiler that a certain function argument should > not be copied (say a large struct, or a array) which is the right way to > do? > > arrays: > 1. function foo(in float[] bar) { ... } 2. function foo(ref > const(float[]) bar) { ... } 3. something else
Just to complement what Steven and Simen have already said, I always find it useful to think of arrays as structs. For instance, int[] is equivalent to struct IntArray { size_t length; int* ptr; } where ptr contains the memory location of the array data. (In fact, the above is not only a conceptual equivalence. The struct above is exactly, bit for bit, how a D array is implemented.) Fixed-size arrays (aka. static arrays), on the other hand, are value types, so there the equivalence goes something like // int[3] struct IntArray3 { int element0; int element1; int element2; } Therefore, if you want to pass large fixed-size arrays to a function, you'd better use 'ref' like you would with large structs. -Lars