[Development] Passing QSize, QPoint, QTime and other small structs by value

Konstantin Tokarev annulen at yandex.ru
Fri Apr 7 13:30:25 CEST 2017



07.04.2017, 13:41, "Sergio Martins" <sergio.martins at kdab.com>:
> 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.

I think such rule should be enforced by tooling, e.g. something like clazy.

Btw, do you consider case when properties of type in question are changed
in future Qt version, e.g. new fields or ctors are added (in case of non-public
class/struct)?

>
> The idea is that by value allows the struct's members to be passed in
> CPU registers, see [2] for extensive research.
>
> 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 | sergio.martins at kdab.com | 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
> Development at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development

-- 
Regards,
Konstantin



More information about the Development mailing list