C++ Logo

std-proposals

Advanced search

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

From: Andrey Semashev <andrey.semashev_at_[hidden]>
Date: Thu, 2 Mar 2023 23:11:25 +0300
On 3/2/23 19:13, Jason McKesson via Std-Proposals wrote:
> 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.

Using `enumerate` requires one to include a nontrivial amount of code,
most of which, I presume, is unrelated to `enumerate`. And it doesn't
really provide that much convenience benefit in return. So given the
choice, I would rather avoid including the header and define the counter
variable myself.

> 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.

Agreed on the "not worth to change the core language" part. Just write
the damn counter variable.

Received on 2023-03-02 20:11:40