[Development] qMoveToConst helper for rvalue references to movable Qt containers?

Lars Knoll lars.knoll at qt.io
Sat Oct 27 22:07:40 CEST 2018



On 27 Oct 2018, at 21:07, Elvis Stansvik <elvstone at gmail.com<mailto:elvstone at gmail.com>> wrote:

Den lör 27 okt. 2018 kl 19:48 skrev Lars Knoll <lars.knoll at qt.io<mailto:lars.knoll at qt.io>>:



On 27 Oct 2018, at 19:29, André Pönitz <apoenitz at t-online.de<mailto:apoenitz at t-online.de>> wrote:

On Sat, Oct 27, 2018 at 04:33:30PM +0100, Sérgio Martins wrote:

On Sat, Oct 20, 2018 at 1:44 PM Elvis Stansvik <elvstone at gmail.com<mailto:elvstone at gmail.com>> wrote:


Hi all (first post),


Welcome :)

In Qt 5.7+ there's qAsConst, an std::as_const implementation for those
who are not on C++17 yet, which is convenient for iterating over Qt
containers using range-based for loops without causing a detach.

For good reasons there's no version of qAsConst that takes an rvalue
reference, so you can't do e.g. for (auto foo :
qAsConst(returnsQtContainer())  { ... }. Instead you must do const
auto stuff = returnsQtContainer(); for (auto foo : stuff) { ... }.


Should we instead just encourage people to make returnsQtContainer()
return a const container ?


This is actually a route we recently took in some cases in Qt Creator's
code base.


That might actually make sense. Calling a non const method on the returned temporary object is usually a mistake anyway. And the copy/move assignment to a variable will work with the const object.

Hm, but was Marc not right when he said

 "Making returned containers const inhibits move semantics, because
const rvalues do not bind to the mutable rvalue references that move
constructors and move assignment operators use."

on his blog?

Guess he should jump in here to defend himself :)

No need. He’s right. A move constructor only works with a non const value, as it needs to modify the object. One thing to check however for our containers is how much more expensive the copy is (compared to the move).

Cheers,
Lars


Elvis


Cheers,
Lars

_______________________________________________
Development mailing list
Development at qt-project.org<mailto:Development at qt-project.org>
http://lists.qt-project.org/mailman/listinfo/development

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20181027/1dda2545/attachment.html>


More information about the Development mailing list