On Monday 09 Mar 2015 12:14:04 Daniel Teske wrote: > > If anyone wants to propose a coding style, please come forward. > > ** Range-based for ** > I'd like to propose the following guideline: > > Do not use the C++11 range based for loop unless your loop modifies the > contents of the container. Prefer to use Qt's foreach macro for read-only > iteration. > > > Reason: > The range-based for loop is using the helper functions std::begin() and > std::end, which unless overloaded call container.begin() and > container.end(). > > Which for Qt's container classes call detach unless the container is const. > > Overloading std::begin() and std::end() to return const_iterators doesn't > work, since you can't then no longer modify the container's contents. > > Thus, the range-based for loop has worse performance for read-only iteration > unless: > > - The container is const > - The container is unshared > > This makes imho the range-based for loop to error-prone for read-only > iteration. I'd like to allow the range-based for loop for modification, > since that's something that simply isn't possible with qt's foreach macro. > > But, I would also agree to a coding guideline of discouraging the range > based for loop completely.
So, we had quite a bit of discussion on how to treat ranged based for loops internally, and thus I like to suggest a different coding guideline: Use range based for-loops, but beware of the spurious detachment problem. If the for-loop only reads the container and it's non-obvious whether the container is const or unshared, use std::cref() to ensure that the container isn't unnecessarily detached. daniel _______________________________________________ Qt-creator mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/qt-creator
