Newsgroup: it.comp.lang.c++
Titolo: Comportamento inaspettato

Problema:
int i = 10;
i=--i+--i;
i = 16 o 17 ?
A occhio direi 17 .. perchè
i = (10-1)+(9-1)
o anche leggendo da destra a sinistra..
(9-1)+(10-1)
ma il risultato è 16? Non riesco a dare una spiegazione a questo risultato
.. l'unica cosa che mi passa per la mente è che essendo la stessa variabile
sempre in gioco ed essendo un tipo primitivo il codice prodotto sfrutti
sempre la stessa variabile, quindi anche se al primo giro i = 9, al secondo
i=8 e il 9
nello stack ha ceduto il passo all'8, quindi poi alla fine 8+8 = 16
Infatti anche la copia
int i=10;
i=--i;    // qui i vale 9
i+=--i;    // qui i varrà 8
da 16 ... almeno sul compilatore con cui ho provato (borland c++ builder 6
enterprise, ma l'amico che mi ha posto il quesito lo ha provato anche su
dev c++)
Mi sono perso qualche paragrafo, qualche riga nei diversi testi che ho letto
nel corso di questi anni o è un qualche strano comportamento del
compilatore?
Grazie
Antonio

 i = 16 o 17 ?
Nessuno dei due.
  [5.4]
  Except where noted, the order of evaluation of operands of
  individual operators and subexpressions of individual expressions, and
  the order in which side effects take place, is unspecified. Between
  the previous and next sequence point a scalar object shall have its
  stored value modified at most once by the evaluation of an expression.
  Furthermore, the prior value shall be accessed only to determine the
  value to be stored. The requirements of this paragraph shall be met
  for each allowable ordering of the subexpressions of a full
  expression; otherwise the behavior is undefined.  [Example:
   i = v[i++];  // the behavior is unspecified
   i = 7, i++, i++;  // i becomes 9
   i = ++i + 1;  // the behavior is unspecified
   i = i + 1;  // the value of i is incremented
Max

 Nessuno dei due.
scusa se taglio ... ma se la domanda è posta in un quesito di esame e i
risultati sono 2 ... tu che risponderesti?
grazie
antonio

 risultati sono 2 ... tu che risponderesti?
Andrei dal professore e gli direi che non ha capito nulla. La risposta e'
undefined. In altre parole lo standard del C++ non ha la risposta, il
risultato dipende dalla implementazione. Su un compilatore potrebbe essre y
e su un altro z.
Tommy

E gli consiglierei un buon libro su come scrivere codice in generale, xche' quella li e' proprio una porcata

 xche' quella li e' proprio una porcata
scusate se mi intrometto, ma questa cosa interessa anche me
io il C++ l'ho imparato un po al corso all'università, ma siccome non
abbiamo fatto proprio tutto e non siamo andati molto in profondità ora
dopo aver superato l'esame vorrei proseguire per i fatti miei lo
studio, e sto valutando qualche altro libro da prendere
durante il corso ho utilizzato "introduzione a C++" di derek m. capper e
non mi è sembrato malvagio per iniziare, anche se ad esempio le
strutture non le accenna nemmeno e sulle liste riporta solo qualche
paragrafetto smilzo.
ora penserei di prendere due libri (a meno che non ne trovi uno che
possa soddisfare quello che ho in mente)
un primo libro da usare tipo "vocabolario", cioè con una dettagliata
panoramica degli strumenti del C++ dove controllare la sintassi e in
generale il modo di utilizzare un dato strumento (quindi dovrebbe
"esplorare" le varie funzionalità per bene)
come secondo libro mi piacerebbe trovare appunto un libro che insegni a
scrivere del buon codice, senza tanto soffermarsi nel spiegare gli
operatori ecc.. quanto sul perchè un determinato problema è stato
affrontato così, magari parlando di efficenza, portabilità ecc...
spero di essere riuscito a spiegare cosa ho in mente
mi rendo conto che un libro non può insegnare a programmare bene, che è
una capacità che si acquisisce con l'esperienza, semplicemente mi
interessa un libro che affronti il C++ in quest'ottica (il meno peggio
che conoscete, nel caso mi diciate un libro fatto così non c'è :-)
come "vocabolario", dopo aver dato un occhiata ai vecchi post (anche se
molto velocemente) pensavo allo Stroustrup oppure al Lippmann (è
scritto giusto?) anche se quest'ultimo un mio amico me l'ha
sconsigliato (però ho visto che qua se ne parlava bene)
per il secondo libro invece sono in alto mare, nel senso che non ho la
minima idea di cosa potrei prendere, avete qualhe consiglio da darmi?
ah, mi ero dimenticato di dire che i libri dovrebbero essere disponibili
in italiano, visto che con l'inglese per il momento sono messo molto
male
grazie infinite
-- 
boydon
Postulato di Boling:
        Se sei di buon umore, non ti preoccupare.  Ti passera'.

 molto velocemente) pensavo allo Stroustrup oppure al Lippmann (è
Voto per lo Stroustrup che si usa meglio come reference, ma anche il
Lippman è decisamente ben fatto.
ciaociao!
-- 
Gerolamo
www.overweb.it

 Effective C++ di Scott Meyers
Ne aggiungo un paio:
Exceptional C++ di Herb Sutter
http://www.amazon.com/exec/obidos/tg/detail/-/0201615622/qid=1074777270/sr=1-1/ref=sr_1_1/002-9428263-6523220?v=glance&s=books
e
C++ Gotchas di  Stephen C. Dewhurst
http://www.amazon.com/exec/obidos/tg/detail/-/0321125185/qid=1074777030/sr=1-1/ref=sr_1_1/002-9428263-6523220?v=glance&s=books
-- 
Gerolamo
www.overweb.it

 Ne aggiungo un paio:
ti ringrazio molto
ciao
-- 
boydon
Hai voglia di lavorare?  Siediti e aspetta.  Ti passera'...