C++ Logo

std-proposals

Advanced search

Re: [std-proposals] Array Index in Range-based For Loops

From: Jason McKesson <jmckesson_at_[hidden]>
Date: Thu, 2 Mar 2023 11:13:10 -0500
On Thu, Mar 2, 2023 at 4:12 AM Frederick Virchanza Gotham via
Std-Proposals <std-proposals_at_[hidden]> wrote:
>
> On Thu, Mar 2, 2023 at 12:19 AM Thiago Macieira via Std-Proposals
> <std-proposals_at_[hidden]> wrote:
> >
> > > >I'm not gonna include a header file and use that horrible syntax.
> > > >Having an implicit variable called "__i" would be much better.
> > >
> > > What would it be called in an inner loop? __j?
>
>
> How about the outermost is __i, and then the next inner one is __j,
> then __k, until we get to __z. That would accommodate 18 nested loops.
>
> for ( auto &container : container_of_containers )
> {
> cout << __i << endl;
>
> for ( string &e : container )
> {
> cout << __i * __j << end;
>
> for ( char const c : e )
> {
> cout << __k << " originating from " << __i << endl;
> }
> }
> }

Here's a better idea: let's not make confusing, trivial changes to the
language for the *minor* comfort of having an index generated by the
compiler. The difference between `for(string &e: container)` and
`for(auto[i, &e]: enumerate(container))` is too insubstantial to
bother with. And it's not like this isn't a common idiom or anything;
Python programmers do this all the time.

Auto-defining variable names is something that a language should only
do when the benefits *vastly* outweigh the alternatives. Saving
someone from having to type `auto` and `std::enumerate` is not that.

Received on 2023-03-02 16:13:58