On 20/01/16 08:12, "Development on behalf of André Somers" <[email protected] on behalf of [email protected]> wrote:
> > >Op 20/01/2016 om 06:47 schreef Thiago Macieira: >> On Wednesday 20 January 2016 05:20:36 Kevin Kofler wrote: >>> Thiago Macieira wrote: >>>> foreach copies; ranged for doesn't. >>> … unless you try to use it on a non-const Qt container with usage count >1, >>> then it will even deep-copy (detach) it! (I know you know this, but you >>> should warn people about it.) So you need to be very careful about what you >>> pass to ranged for. >> Indeed. >> >> But his is the argument that convinced me: with foreach and Qt containers, >> you >> usually get the runtime performance you want, but it costs in dead code since >> the deep-copy code will be present (at least until we can get rid of the >> unsharable flag). With ranged for plus qAsConst, there's no copy code >> generated. >> >> So instead of: >> >> foreach (auto x, container) >> >> You'll write: >> >> for (auto x : qAsConst(container)) >> >> or if you know it's already const, you can skip the qAsConst part. >> >> This is no more and no less readable, but is more explicit about what it >> does. >Where is this qAsConst coming from? When was it introduced? Where is it >documented? > >I can't find it in my Qt documentation. It just got added some weeks ago, after we realised that range-for would lead to our containers detaching. So it'll be in 5.7. In general, I'm very much in favour of getting rid of foreach in favour of range-for. Cheers, Lars _______________________________________________ Development mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/development
