> 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

Reply via email to