On Wednesday, 27 November 2013 at 03:14:38 UTC, Parke wrote:
Are slices passed (and returned) by value or by reference?

By value, though they are a pointer into the data.

void foo(int[] data) {
  data[0] = 20;
  data ~= 100;
}

void main() {
  int[4] buffer;
foo(buffer[]); // slice passed by value, but it still points into the buffer assert(buffer[0] == 20); // so the change to the data is reflected here assert(buffer.length == 4); // but the append is not visible here, since that affected the slice itself, passed by value, not the contents it pointed to.
}

Reply via email to