range and algorithm-related stuff
Denis Koroskin
2korden at gmail.com
Mon Jan 26 12:37:25 PST 2009
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.
More information about the Digitalmars-d
mailing list