> On 7 Apr 2017, at 12:40, Sergio Martins <[email protected]> wrote: > > Hi, > > > Some time ago I documented the guidelines on passing by value vs const-ref: > https://wiki.qt.io/API_Design_Principles#Passing_by_const-ref_vs._Passing_by_value > This was discussed in #qt-labs at the time and informally +2'd there. > > But the reality is that passing small structs by value is not very popular > and Qt's API mostly passes them by const-ref. > > I think this is a good time to have a more formal conversation, > bikeshed+popcorn, then write a QUIP and hopefully change the API for Qt 6. > > > The guideline is very simple: > - If your type has a non-trivial copy-CTOR or non-trivial DTOR then pass by > const-ref, no matter how small it is, to avoid calling those methods. *[1] > - If your type has trivial CTOR and trivial DTOR, pass by value if it's > small, otherwise const-ref. Small meaning <= 16 bytes. > > The idea is that by value allows the struct's members to be passed in CPU > registers, see [2] for extensive research.
Those rules sound about right. We can do this nowadays, as x86 will become rather irrelevant for Qt 6 (where passing structs by reference would probably be better in most cases due to the limited amount of available registers). There might be a little catch with regards to structs containing members that are 8 bytes in size (aka quint64). Are those getting passed in registers on 32bit ARM? Cheers, Lars > > > The good news is, even if you don't care about raw performance, passing by > value is more convenient, as you type less code, so IMO, more fun to use. > > > [1] - Shared pointers should go by value though, I'll try to prove it in the > QUIP. > [2] - http://www.macieira.org/blog/2012/02/the-value-of-passing-by-value/ > > > > > > Cheers, > -- > 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 _______________________________________________ Development mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/development
