EasyHack Suggestion: Use range based for loops

Luboš Luňák l.lunak at collabora.com
Thu Oct 21 15:25:13 UTC 2021

On Thursday 21 of October 2021, Hossein Nourikhah wrote:
> Since C++11, range based loops are available for iterating over a known
> range of values. For example, when there is a need to process elements
> of a container, range based loops are usually a good choice. They are
> easy to write, read and understand.
> The simplest form is as below:
> for(auto variable : range)
> 	statement;

 I generally dislike the (ab)use of 'auto' to save a little typing at the 
expense of readibility. Code is read much more often than written, and it's 
also quite often read e.g. in gerrit where there's nothing to easily tell 
what 'auto' is, so generally code should be aimed at being easy to read, not 
necessarily to write. It's not black or white of course, but I disagree with 
something that generically advises to use 'auto'.

> Range based loops can simplify the code, but there are limitations for
> them. For example, if there is a need not to iterate over certain
> values, std::ranges::views::drop (C++20) should be used, so they are not
> suitable for replacing every normal for loop.

 If the instructions are aimed at people who need spelling out how to use 
ranged for loops, then it needs to stress more that it is basically usable 
only for sequential iterating over elements of a container that does not 
change. Otherwise we risk that newbies will break things by rewriting even 
non-trivial loops.

 And that std::ranges::views::drop part does not belong there at all. C++20 
makes it useless for now, and even without that it would only confuse people.

 Luboš Luňák
 l.lunak at collabora.com

More information about the LibreOffice mailing list