Minggu, Mei 03, 2020

Pre-increment atau pre-decrement pada C++

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.





Related Posts

Pre-increment atau pre-decrement pada C++
Oleh

"semoga yang memberikan komentar diberikan berkah kebaikan dari Allah, dijauhkan dari kejahatan, dan diberikan pahala ilmu dan amal jariyah dari sepenggal kata yang ia tinggalkan amiin :) "