Slincing behaviour
Simon
s.d.hammett at gmail.com
Sat Nov 12 02:33:51 PST 2011
On 11/11/2011 23:23, Steven Schveighoffer wrote:
> Ali Çehreli Wrote:
>
>> On 11/11/2011 01:42 PM, Steven Schveighoffer wrote:
>>> On Fri, 11 Nov 2011 16:10:12 -0500, Simon<s.d.hammett at gmail.com> wrote:
>>>
>>>> On 11/11/2011 19:04, Steven Schveighoffer wrote:
>>>>> On Fri, 11 Nov 2011 14:01:42 -0500, Steven Schveighoffer
>>>>> <schveiguy at yahoo.com> wrote:
>>>>>
>>>>>> There should be no bounds error in any case, an empty slice is valid.
>>>>>
>>>>> By "in any case" I meant in either debug or release mode.
>>>>>
>>>>> -Steve
>>>>
>>>> even when you index beyond the bounds of the slice?
>>>>
>>>> you may not actually be reading memory because it's zero length, but
>>>> it's still logically invalid; you've gone outside the valid range.
>>>
>>> You are not reading beyond the valid range. A zero-length slice is
>>> perfectly legal to point at the end of an array or other slice. Reading
>>> any data from a zero-length slice will cause an out-of-bounds error in
>>> debug mode, because it has no elements.
>>>
>>>> in vc9, if you increment an iterator beyond the valid range you get a
>>>> debug assert. that's caught quite a few bugs where I work when we
>>>> upgraded to vc9.
>>>
>>> I think you are misunderstanding what the $ actually means.
>>>
>>> It's the equivalent in C++ iterators to x.end.
>>>
>>> The pair of iterators x.end, x.end is a valid range. Going *beyond*
>>> x.end would be illegal. But iterating *to* x.end is legal (which would
>>> be the equivalent of [$..$] range), and you will not be able to convince
>>> me that vc9 doesn't allow it.
>>>
>>> -Steve
>>
>> How about Jonathan's this comment: "It wouldn't surprise me if arr[500
>> .. 500] worked exactly the same way. Because the array is empty, it
>> doesn't really matter what values you gave it."
>>
>> I think Simon is objecting to 500..500 being accepted (if at all). I
>> agree that $..$ is correct.
>>
>> Ali
>
> Oh my mistake! I thought we were talking about arr[$..$]!
>
> Yes, arr[500..500] would result in bounds errors if the array is only 7 elements. When I read it I thought it was just an arbitrary example to show another way to get an empty slice with an assumption that 500 is a valid index.
>
> -Steve
Yup, that was what I was on about. Should have been a bit clearer on
that. Ta.
--
My enormous talent is exceeded only by my outrageous laziness.
http://www.ssTk.co.uk
More information about the Digitalmars-d-learn
mailing list