PDA

Visualizza la versione completa : [C++] concatenazione operator==


MegaAlchimista
19-01-2013, 17:07
un tipico operatore di uguaglianza è scritto come segue


class class
{
bool operator==(const class& x2) const;
};

a destra ed a sinistra ha due membri dello stesso tipo e restituisce un bool.

Allora la domanda è: perchè si può concatenare?
quando si scrive per esempio:

a1==a2==a3
a2==a3 restituisce un bool, allora a1 non dovrebbe vedere alla propria destra il risultato di questa operazione? Dando errore di compilazione in quanto non esiste una definizione di questo operatore che veda alla propria destra un bool?

MItaly
20-01-2013, 00:49
Infatti l'operatore == non si può concatenare :stordita: - o meglio, puoi concatenarlo se i tipi in ballo sono solo tipi aritmetici, ma solo perché c'è una conversione implicita a bool, e il risultato non è quello che ci si attenderebbe. È l'operatore = (assegnamento) che si può concatenare.

MegaAlchimista
20-01-2013, 11:28
Ecco infatti stavo venendo a scrivere che avevo scoperto un errore grosso come la germania.
La classe in questione aveva un costruttore con un float, quindi quando a un certo punto si trovava di fronte a


Class nome{
nome(float x);

bool operator==(const nome& other);
};


//...…
nome a,b,c,d;
if (a==b==c==d)
//lui lo trasformava in
if (a==b==nome(1.0)). //o 0, dipende dal risultato

lui vedeva il bool come intero, convertiva in float e paragonava la classe costruita con quel valore... Una cosa tremenda.

Quindi rigiriamo la domanda: avevo visto delle funzioni dello standard che prendevano un numero indeterminato di argomenti (con l'operatore due punti ..), potrei scrivere delle funzioni in questo modo per i tre tipici casi di concatenazione? (tutti uguali, in ordine crescente, o decrescente)

Loading