In C++, pre-increment (or pre-decrement) can be used as l-value, but post-increment (or post-decrement) can not be used as l-value.
For example, following program prints a = 20 (++a is used as l-value)
a = 20
The above program works whereas the following program fails in compilation with error “non-lvalue in assignment” (a++ is used as l-value)
prog.cpp: In function 'int main()': prog.cpp:6:5: error: lvalue required as left operand of assignment a++ = 20; // error ^
How ++a is different from a++ as lvalue?
It is because
++a returns an lvalue, which is basically a reference to the variable to which we can further assign — just like an ordinary variable. It could also be assigned to a reference as follows:
int &ref = ++a; // valid int &ref = a++; // invalid
Whereas if you recall how
a++ works, it doesn’t immediately increment the value it holds. For brevity, you can think of it as getting incremented in the next statement. So what basically happens is that
a++ returns an rvalue, which is basically just a value like the value of an expression which is not stored. You can think of
a++ = 20; as follows after being processed:
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;
That should help to understand why
a++ = 20; won’t work.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
- Dividing a Large file into Separate Modules in C/C++, Java and Python
- How to delete a range of values from the List using Iterator
- How to create a List with Constructor in C++ STL
- C program to store Student records as Structures and Sort them by Name
- How to delete last element from a List in C++ STL
- Can C++ reference member be declared without being initialized with declaration?
- Finding Floor and Ceil of a Sorted Array using C++ STL
- Some useful C++ tricks for beginners in Competitive Programming
- Replace each node with its Surpasser Count in Linked List
- Comparison of Java with other programming languages
- Print multiples of Unit Digit of Given Number
- Similarities and Differences between Ruby and C language
- Similarities and Differences between Ruby and C++
- Program to copy the contents of one array into another in the reverse order
- Interesting facts about C Language
Improved By : SangeethSudheer