On Wed, Jul 10, 2013 at 08:38:40PM +0200, JohnnyK wrote:
[...]
> Reminds me of how Delphi (aka Pascal) strings are work.  Thanks
> everyone this answers some of my questions.  Now what about when the
> return type of a function is a string?  Is D returning the pointer
> to the string structure or is it returning the structure?

D structs are always passed by value, so it's the length+pointer pair
that's being returned. There's no extra indirection involved here. What
it points to stays where it is on the GC heap.

So for example:

        int[] data = [1,2,3];

        int[] f() {
                return data;
        }

        void main() {
                auto arr = f(); // returns copy of data's ptr+length
                arr.length--;   // modifies this copy
                assert(arr == [1,2]);
                assert(data == [1,2,3]); // data itself hasn't changed
        }

Does this help?


T

-- 
Be in denial for long enough, and one day you'll deny yourself of things you 
wish you hadn't.

Reply via email to