Pada C++, pre-increment (atau pre-decrement) dapat digunakan sebagai I-value, tetapi post-increment (atau post-decrement) tidak dapat digunakan sebagai I-value.
Contoh, program berikut akan mencetak nilai a=20 (++a digunakan sebagai I-value)
Output:
a=20
Program sebelumnya dapat berfungsi sedangkan program selanjutnya akan gagal dikompilasi karena kesalahan "non-Ivalue in assignment" (a++ digunakan sebagai I-value)
Output:
prog.cpp: In function 'int main()':
prog.cpp:6:5: error: lvalue required as left operand of assignment
a++ = 20; // error
^
Kenapa ++a dapat berbeda terhadap a++ sebagai I-value?
Hal tersebut dapat terjadi karena ++a mengembalikan I-value, yang pada dasarnya merupakan referensi untuk nilai variabel yang dapat diberikan lebih lanjut seperti halnya variabel biasa. Juga dapat ditetapkan sebagai nilai referensi:
int &ref = ++a; // valid
int &ref = a++; // invalid
Namun jika digunakan nilai a++ pada program, hal tersebut tidak langsung akan meningkatkan nilai dari variabel a, sederhananya nilai a dapat bertambah setelah pernyataan (++) berikutnya dieskekusi setelah nilai a.
int a = 10;
// On compilation, a++ is replaced by the value of a which is an rvalue:
10 = 20; // Invalid
// Value of a is incremented
a = a + 1;
Hal inilah yang dapat membantu memberikan pemahaman kenapa nilai a++=20 tidak dapat bekerja jika sebuah program dijalankan dengan nilai tersebut.
Tidak ada komentar:
Posting Komentar
Respon komentar 7 x 24 jam, so please be patient :D