Multiple se in comparazione function vs chain of || o && [duplicato]

0

Sto scrivendo una funzione (o operator==() in C ++), confrontando due oggetti. Il codice ha il seguente aspetto:

bool operator==(const Obj& copy1, const Obj& copy2)
{
    if(copy1.a!=copy2.a)
        return false;
    if(copy1.b!=copy2.b)
        return false;
    if(copy1.c!=copy2.c)
        return false;
    return true;
}

Ci possono essere molti più membri di dati da confrontare, e non tutti i membri presenti in Obj devono essere confrontati, quindi usare memcmp() non è un'opzione. Potrebbero esserci anche test più complicati della sola equità dei membri. Ora c'è un altro modo:

bool operator==(const Obj& copy1, const Obj& copy2)
{
    return (copy1.a==copy2.a &&
            copy1.b==copy2.b &&
            copy1.c==copy2.c);
}

Il primo modo sembra più verboso, ma anche più facile da modificare, mentre il secondo sembra un po 'fragile (non si può spiegare perché, solo sentirsi bene), ma sembra molto più semplice.

Che cos'è un modo migliore? C'è una vera differenza nella leggibilità o nella manutenibilità di questi approcci?

    
posta Ruslan 28.05.2015 - 15:08
fonte

1 risposta

1

Il primo esempio è cattivo / fragile a causa della mancanza di parentesi graffe. Tale codice non passerebbe la revisione del codice nella maggior parte dei luoghi in cui ho lavorato. Se aggiungi delle parentesi (se si preferisce una linea singola se preferisci), allora sono abbastanza equivalenti a quello che ho visto. Molti posti preferiranno il primo dato che i condizionali possono essere usati ovunque, ma l'espressione complessa può essere usata solo quando le sue parti sono relativamente semplici / simili. Ma non obietteranno alla seconda versione in questo tipo di casi e non porteranno a problemi di manutenzione.

    
risposta data 28.05.2015 - 15:14
fonte

Leggi altre domande sui tag