Anche se la risposta breve "non è un lvalue" è corretta, questo è forse solo supplicando la domanda. Perché non è un lvalue? Oppure, come diciamo in C#, una variabile .
Il motivo è perché non puoi avere la tua torta e mangiarla anche. Esegui logicamente:
Prima di tutto, il significato di un operatore ++ in C#, se postfix o prefisso, è "prende il valore di questa variabile, incrementa il valore, assegna il nuovo valore alla variabile e come risultato ". Il valore prodotto come risultato è il valore originale o il valore incrementato, a seconda che si tratti di un suffisso o di un prefisso. Ma in entrambi i casi, produci un valore.
Secondo, il valore di una variabile è sempre il contenuto corrente di tale variabile. (Modulo certi bizzarri scenari di threading che ci porterebbero molto lontano.)
Spero tu sia d'accordo che queste sono regole perfettamente sensate.
Ora dovrebbe essere chiaro il motivo per cui il risultato di I ++ non può essere una variabile, ma nel caso in cui non lo è, mi permetta di mettere in chiaro:
suppongo sia 10. Il significato di i ++ dovrebbe essere "get il valore di i - 10 - incrementalo - 11 - memorizzalo - i è ora 11 - e dai il valore originale come risultato - 10 ". Quindi quando dici print (i ++) dovrebbe stampare 10, e 11 dovrebbe essere memorizzato in i.
Ora supponiamo che il significato di i ++ è quello di restituire la variabile, non il valore. Dici print (i ++) e cosa succede? Ottieni il valore di i - 10 - incrementalo - 11 - memorizzalo - ora sono 11 - e restituisci la variabile come risultato. Qual è il valore corrente della variabile? 11! Che è esattamente quello che NON vuoi stampare.
In breve, se i ++ ha restituito una variabile, sarebbe esattamente il contrario del significato previsto dell'operatore! La tua proposta è logicamente incoerente, motivo per cui nessuna lingua lo fa in questo modo.
Anche se non lavoro, non si dovrebbe, perché non si deve odiare la vita: (Vedendo ++ i ++ mi renderebbe triste in qualsiasi contesto, a prescindere dalla spiegazione – Malaxeur
Non posso, e non dovrei. – luke
Non sapevo che ci fosse il tag "stupido operatore-trucchi", grazie John! – zvolkov