2011-09-09 23 views
6

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?

+1

Quando si citano sezioni specifiche dello standard, si potrebbe voler indicare a quale versione si sta riferendo. –

+0

@ André Caron Citato dalla versione n3290 di C++ 11, ecco perché sono stato in grado di richiamare 'duration'. – Cubbi

risposta

2

Per quanto io sappia non ci sono differenze rispetto a decidere se una funzione non-operatore deve essere membro o non membro. Ovviamente preferisco non membro, non amico quando possibile (come gli algoritmi standard).

0

Uso dei membri, quando possibile, ha più senso, dal momento che non c'è bisogno di impazzire con gli amici. Altrimenti, è solo una decisione in stile codice.

+1

E la linea guida new age Sutter/Alexandrescu per rendere tutto non amico non appartenente alla Chiesa se possibile? – Cubbi

+0

@Cubbi Sì, è sempre meglio dare il minimo dei diritti di accesso, ma preferisco il mio codice succinto. –

Problemi correlati