On 2018-10-29 15:56, Thiago Macieira wrote:
On Monday, 29 October 2018 04:43:09 PDT Olivier Goffart wrote:
> 1) it will copy containers. For Qt containers, that's rather cheap (two
> atomic refcount operations), but it's not free. And for Standard Library
> containers, that is likely very expensive.

But using for(:) with a Qt container will cause a detach in the most common
case, so I'd say is even worse.
Which is why i'm saying using this reason is a bit ironic.

True, which is why we didn't deprecate, but did add qAsConst.

> 2) it's implemented by way of a for loop inside a for loop, which is known
> to throw optimisers out, generating slightly worse code

I would consider that the missed optimization is quite small, if not
negligible. And it can be solved in C++17:
https://codereview.qt-project.org/243984/

I'd solve this the other way around, by making the macro:

    if (const auto &_container_ = (container); true) \
        for (variable : _container_)


That's not behaviour-compatible and will introduce bugs where users rely on iterating over a copy.




Regards,
--
Sérgio Martins | [email protected] | Senior Software Engineer
Klarälvdalens Datakonsult AB, a KDAB Group company
Tel: Sweden (HQ) +46-563-540090, USA +1-866-777-KDAB(5322)
KDAB - The Qt, C++ and OpenGL Experts
_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to