[cs13001] on increment and decrement
Mikhail Nesterenko
mikhail at cs.kent.edu
Mon Feb 4 12:46:11 EST 2013
CSI students,
There was a discussion on increment and decrement operations in one of
the classes. Several clarifications.
* Increment and decrement operations can only apply to a variable. The
precise term for it is "l-value": something that has an explicit
address in memory (whose value can be decremented or incremented).
Expressions are not l-values. Therefore, operations like this:
a =(b+5)++;
are not allowed. Microsoft's compiler generates error:
'++' needs l-value
Moreover,
a = (b++)++;
is also not allowed (the increment in parentheses is considered an
expression).
However, this expression is perfectly legal:
a = b++ + ++c; // "b" and "c" are incremented, their values are
// summed and assigned to "a"
// note old c's value is used in the expression
* In modern programming, the suffix form of the increment/decrement is
considered inefficient and is to be avoided. The reason is
this. Consider the statement below
a = b++ - 33 + (a*c-33);
Variable "b" is incremented using the suffix form. This means that
the old value of "b" is used in the expression. When compiler
generates object code, it has to create a temporary variable to
store the old value (either to be used in the expression or to be
assigned to the variable). This inefficiency may be minor for
the types with have studied so far. However, it may be significant
for the classes/objects that we will study later.
Note that there is no need for temporary variables, and no resultant
inefficiency in case the prefix from of the increment is used:
a = ++b - 33 + (a*c-33);
Thanks,
--
Mikhail
More information about the cs13001
mailing list