On Tuesday, 24 January 2017 at 11:38:16 UTC, Jonathan M Davis
wrote:
Likely because it does bounds checking, so you at least know
that it's not null. But I don't see why that would really
improve much considering that the odds are that you're really
going to be accessing far more than just the first element with
the pointer. It seems _slightly_ better from a safety
perspective but only slightly. So, I don't know what the point
is in suggesting it as an alternative.
- Jonathan M Davis
Pointer arithmetic is forbidden in @safe code so that's not a
problem. The reason this was introduced was indeed bounds
checking. For example:
@safe:
int parse(ref char[] input)
{
// Pop all numeric characters from the front of the input slice
and convert to int
}
void main()
{
auto input = "123".dup;
parse(input);
// Since all numeric chars have been popped, input is now
effectively input[$ .. $].
// This means input.ptr is pointing past the end of the array.
writeln(input.ptr); // Out of bounds access
}