Bu, C ve C ++ 'da değer ve değerlerle ilgilidir.
C programlama dilinde, hem artım öncesi hem de artım sonrası işleçleri, değerleri değil, değerleri döndürür. Bu, =
atama operatörünün sol tarafında olamayacakları anlamına gelir . Bu ifadelerin her ikisi de C'de bir derleyici hatası verecektir:
int a = 5;
a++ = 2; /* error: lvalue required as left operand of assignment */
++a = 2; /* error: lvalue required as left operand of assignment */
C ++, ancak önceden arttırma operatör döner lvalue artırma sonrası operatör rvalue döndürür iken,. Bu, ön artış operatörü ile bir ifadenin =
atama operatörünün sol tarafına yerleştirilebileceği anlamına gelir !
int a = 5;
a++ = 2; // error: lvalue required as left operand of assignment
++a = 2; // No error: a gets assigned to 2!
Şimdi neden böyle? Artırma sonrası değişken artırır ve olduğu gibi değişken döndürür önce artış oldu. Bu aslında sadece bir değerdir. A değişkeninin eski değeri geçici olarak bir kayıt defterine kopyalanır ve sonra a artırılır. Ancak a'nın eski değeri ifade tarafından döndürülür, bu bir değerdir. Artık değişkenin geçerli içeriğini temsil etmemektedir.
Önceden arttırma ilk artışlarla değişken ve oldu gibi o değişken döndürür sonra artış oldu. Bu durumda, değişkenin eski değerini geçici bir kayıt defterine depolamamız gerekmez. Değişkenin yeni değerini artırıldıktan sonra alırız. Böylece ön artış bir lvalue, değişken a'nın kendisini döndürür. Bu değeri başka bir şeye atamak için kullanabiliriz, aşağıdaki ifadeye benzer. Bu, değerin örtük bir değere dönüştürülmesidir.
int x = a;
int x = ++a;
Ön artış bir değer döndürdüğü için, buna bir şey de atayabiliriz. Aşağıdaki iki ifade aynıdır. İkinci ödevde, önce a artırılır, daha sonra yeni değerinin üzerine 2 yazılır.
int a;
a = 2;
++a = 2; // Valid in C++.