D17028: Loader: Avoid Q_FOREACH

David Edmundson noreply at phabricator.kde.org
Tue Nov 20 15:56:30 GMT 2018


davidedmundson added inline comments.

INLINE COMMENTS

> loh.tar wrote in loader.cpp:273
> Probably, yes. But Qt docu always says, "thanks to implicit sharing copying a container is very fast"
> 
> Is copy previous into a const var a benefit (as I have seen recently)? Don't think so. Or would iterate by index avoid that? (It's a QStringList) I don't know. Guess the problem remains. You need to keep a copy.
> 
> I think I read something like, "Don't worry when using a function return value", but can't find it anymore. So, perhaps it was my conclusion from here: http://doc.qt.io/qt-5/qtglobal.html#qAsConst
> 
> Reads similar to me: https://www.kdab.com/goodbye-q_foreach/
> 
> Let me know what you like to see, will do it.

> Probably, yes. But Qt docu always says, "thanks to implicit sharing copying a container is very fast"

That's mixing up docs.

foreach() always does a const copy of the list. This is a cheap implicitly shared copy.
when we loop we're never detaching this list because it's const.

for() does not
So when we loop if we call begin() we might get the non-const version. If this list is used elsewhere that means we detach and that causes a deep-copy. This is expensive.

In this specific case language() returns a new QStringList (.keys() generates a new list) so I /think/ it is fine,

but it's definitely ambiguous. A qAsConst would make sense here.

REPOSITORY
  R246 Sonnet

REVISION DETAIL
  https://phabricator.kde.org/D17028

To: loh.tar, davidedmundson
Cc: smartins, kde-frameworks-devel, michaelh, ngraham, bruns
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20181120/0a97ea91/attachment.html>


More information about the Kde-frameworks-devel mailing list