Esto se refiere a valores y valores en C y C ++.
En el lenguaje de programación C, tanto los operadores de incremento previo como los de incremento posterior devuelven valores, no valores. Esto significa que no pueden estar en el lado izquierdo del =
operador de asignación. Ambas declaraciones darán un error de compilación en C:
int a = 5;
a++ = 2; /* error: lvalue required as left operand of assignment */
++a = 2; /* error: lvalue required as left operand of assignment */
Sin embargo, en C ++, el operador anterior al incremento devuelve un valor l , mientras que el operador posterior al incremento devuelve un valor r. ¡Significa que se puede colocar una expresión con el operador de pre-incremento en el lado izquierdo del =
operador de asignación!
int a = 5;
a++ = 2; // error: lvalue required as left operand of assignment
++a = 2; // No error: a gets assigned to 2!
Ahora, ¿por qué es así? El incremento posterior incrementa la variable y devuelve la variable como estaba antes. ocurriera el incremento. En realidad, esto es solo un valor. El valor anterior de la variable a se copia en un registro como temporal, y luego se incrementa a. Pero el valor anterior de a es devuelto por la expresión, es un valor r. Ya no representa el contenido actual de la variable.
El pre-incremento primero incrementa la variable, y luego devuelve la variable tal como se convirtió después del incremento. En este caso, no necesitamos almacenar el valor anterior de la variable en un registro temporal. Simplemente recuperamos el nuevo valor de la variable después de que se ha incrementado. Entonces, el pre-incremento devuelve un valor l, devuelve la variable a sí mismo. Podemos usar asignar este valor de l a otra cosa, es como la siguiente declaración. Esta es una conversión implícita de lvalue en rvalue.
int x = a;
int x = ++a;
Como el incremento previo devuelve un valor l, también podemos asignarle algo. Las siguientes dos declaraciones son idénticas. En la segunda asignación, primero se incrementa a, luego su nuevo valor se sobrescribe con 2.
int a;
a = 2;
++a = 2; // Valid in C++.