Dato che gli operatori unari prefisso possono essere "implementati da una funzione membro non statico senza parametri o una funzione non membro con un parametro" (§13.5.1 [over.unary]/1), c'è un differenza oltre al solito incapsulamento/riutilizzo del codice razionali di progettazione che si applicano a qualsiasi scelta di funzioni membro/non membro?overload unario meno: membro o non membro?
Per gli operatori binari, there's a semantic difference perché non aderenti permettono conversioni implicite dei loro operandi di sinistra. Non sembra essere qualcosa di simile per gli operatori unari, eppure lo standard definisce std::complex
'operatore di negazione unaria s come un non-membro (§26.4.6 [complex.ops]), mentre std::valarray
' s e std::duration
's gli operatori di negazione unaria sono membri (§26.6.2.6 [valarray.unary], §20.11.5.3 [time.duration.arithmetic]). C'è una sfumatura?
Quando si citano sezioni specifiche dello standard, si potrebbe voler indicare a quale versione si sta riferendo. –
@ André Caron Citato dalla versione n3290 di C++ 11, ecco perché sono stato in grado di richiamare 'duration'. – Cubbi