Newsgroup: it.comp.lang.c++
Titolo: booleani

Sapreste dirmi se posso utilizzare i valori booleani in C++ e come, bisogna
importare qualche libreria in particolare?

 Sapreste dirmi se posso utilizzare i valori booleani in C++ e come,
        bool pinco( true ), pallino( false );
        int main( ) {
                pallino = pinco;
                return ( pallino == pinco );
        }
Nessuna libreria, nessun include particolare: sono tipi primitivi del 
linguaggio.
Ciao!
-- 
---
*************** | Have you ever retired a human by mystake?
*** Azathot *** |
*************** | To contact me, ask me gently. Thanks.

grazie!

[snip]
ok, ora mettiamo che io avessi scritto
bool pinco = true, pallino = false;
...
tu che mi avresti risposto? c'era qualcosa di leggermente sbagliato
nella mia versione? o sono del tutto equivalenti?
-- 
]\/[ad]\/[age (
www.mindreamz.net
)
"Un Maestro insegue semplicemente la sua visione di Eccellenza in
qualunque cosa sta facendo e lascia agli altri decidere se sta 
lavorando o giocando. A lui sembra sempre di fare entrambe." - Anonimo

 nella mia versione? o sono del tutto equivalenti?
del tutto simili ... in C++ si possono usare i dati base come fossero
oggetti ... ecco perche' le due dichiarazioni sono uguali in tutti e due i
casi (per gli oggetti e' cmq consigliato di usare sempre le parentesi)
ciao

 nella mia versione? o sono del tutto equivalenti?
La tua versione (in linea teorica) prevederebbe implicitamente sei chiamate 
a funzioni (una chiamata al costruttore per i valori costanti, una chiamata 
per l'operatore di assegnazione), mentre la mia ne prevedere solo due (i 
singoli costruttori). 
Cioè la tua genererebbe qualcosa del tipo:
        * costruttore bool( true ) -> tmp
        * operator =( pinco, tmp )
        * distruttore tmp
        * costruttore bool( false ) -> tmp
        * operator =( pallino, tmp )
        * distruttore tmp
La mia versione invece dovrebbe fare qualcosa del tipo:
        * costruttore bool( true ) -> pinco
        * costruttore bool( false ) -> pallino
Nella fattispecie, essendo "bool" un tipo primitivo, il compilatore omette 
questi passaggi perché conosce esattamente la semantica delle operazioni 
che vai ad effettuare, quindi sia la mia che la tua versione sono 
equivalenti.
Però, siccome non costa niente ed è una pratica consigliabile per tutti gli 
altri oggetti che puoi istanziare, te la consiglio. ;-)


         * costruttore bool( false ) -> pallino
No no, in realtà le due versioni sono del tutto equivalenti, e chiamano il
costruttore di copia dell'oggetto (nessun operatore di assegnamento è
chiamato, neanche quando si usa la forma bool pinco=true).
Se il costruttore fosse stato dichiarato explicit, non si potrebbe usare la
forma bool pinco=true (Ciò può servire in generale per evitare che si usi un
costruttore a mo' di cast implicito).
--
imho

 chiamato, neanche quando si usa la forma bool pinco=true).
Ragazzo, leggi il mio messaggio prima di rispondere:
        Nella fattispecie, essendo "bool" un tipo primitivo, il compilatore 
        omette questi passaggi perché conosce esattamente la semantica 
        delle operazioni che vai ad effettuare, quindi sia la mia che la 
        tua versione sono equivalenti.
:-)
Ciao.


         mia che la tua versione sono equivalenti.
No, guarda, forse hai frainteso il commento di Imho: quando dice che nessun 
operatore assegnamento è chiamato intende dire che l'operatore assegnamento 
non è coinvolto in nessuna maniera, nemmeno a livello, diciamo, teorico, e 
non lo sarebbe neppure se al posto di un bool ci fosse un tipo definito 
dall'utente. In sostanza, quella sintassi è una forma di inizializzazione e 
non ha nulla che vedere con l'assegnamento, in nessuna circostanza.
Max

         tua versione sono equivalenti.
Quello che hai scritto nel tuo messaggio precedente e' comunque
scorretto: in un'istruzione della forma:
tipo variabile = valore;
l'operatore di assegnamento non e' *mai* chiamato. Quello che succede
teoricamente e' che 'valore' e' costruito come temporaneo e poi
copiato col costruttore di copia in 'variabile'. Il compilatore e'
libero di omettere la copia.
Ciao,
Nicola

libero di omettere la copia.
ok, non  èchiamato l'operatore di assegnamento... ma il costruttore di
copia sì, però, dico bene?
costruttore bool -> tmp
costruttore di copia(tmp) -> pinco
distruttore tmp
invece che semplicemente
costruttore bool -> pinco


 costruttore bool -> pinco
In teoria sì, ma credo che tutti i compilatori omettano la copia di un
oggetto temporaneo e costruiscano direttamente l'oggetto dichiarato. E' così
?
--
imho

 costanti, una chiamata per l'operatore di assegnazione),
ROTFL. Operatore di assegnazione? tu fumi forte, vero? explicit che sta  
a farci?
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.2. C, C++ and ASM developers
                               and beta testers are welcome!