Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] concatenazione operator==

    un tipico operatore di uguaglianza è scritto come segue
    codice:
    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:
    codice:
    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?

  2. #2
    Infatti l'operatore == non si può concatenare - 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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    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
    codice:
    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)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.