range and algorithm-related stuff
Denis Koroskin
2korden at gmail.com
Mon Jan 26 15:34:06 PST 2009
On Mon, 26 Jan 2009 23:37:25 +0300, Denis Koroskin <2korden at gmail.com> wrote:
> Steven Schveighoffer Wrote:
>
>> "Andrei Alexandrescu" wrote
>> > I'm working on the new range stuff and the range-based algorithm. In
>> all
>> > likelihood, you all might be pleased with the results.
>> >
>> > I wanted to gauge opinions on a couple of issues. One is, should the
>> > empty() member function for ranges be const? On the face of it it
>> should,
>> > but I don't want that to be a hindrance. I presume non-const empty
>> might
>> > be necessary sometimes, e.g. figuring out if a stream is empty
>> effectively
>> > means fetching an element off it.
>> >
>>
>> Ranges are structs. It should not matter if you want to make some
>> const and
>> some non-const. Basically, it depends on the range implementation. If
>> you
>> can make it const, make it const, if not, don't make it const. It
>> shouldn't
>> break any APIs.
>>
>> For example, an array range might have empty be const, but a stream
>> range
>> might not. What matters is what functions you can use those ranges in,
>> but
>> those are generally templated functions, so the compiler will tell you
>> whether it can be used or not when it tries to compile it.
>>
>> Personally, I see no benefit to having empty() be const. What benefits
>> do
>> you gain by specifically making empty const and the other functions not
>> const? Presumably, the underlying container must be not const in order
>> for
>> head, next, etc. to work properly, so there is no requirement there.
>>
>> -Steve
>>
>>
>
> Checking if a range is empty() prior to accessing its head is useful. If
> empty() is const, you can't do that.
Err.. if empty() is not const and you have a const range reference.
More information about the Digitalmars-d
mailing list