It is very convenient to have operators which return the "minimum" or the
"maximum" of two arguments. In GNU C++ (but not in GNU C),
a <? b
is the minimum, returning the smaller of the numeric values
a and b;
a >? b
is the maximum, returning the larger of the numeric values a
and b.
These operations are not primitive in ordinary C++, since you can
use a macro to return the minimum of two things in C++, as in the
following example.
#define MIN(X,Y) ((X) < (Y) ? : (X) : (Y))
You might then use `int min = MIN (i, j);' to set min to
the minimum value of variables i and j.
However, side effects in X or Y may cause unintended
behavior. For example, MIN (i++, j++) will fail, incrementing
the smaller counter twice. A GNU C extension allows you to write safe
macros that avoid this kind of problem (see section Naming an Expression's Type). However, writing MIN and MAX as
macros also forces you to use function-call notation for a
fundamental arithmetic operation. Using GNU C++ extensions, you can
write `int min = i <? j;' instead.
Since <? and >? are built into the compiler, they properly
handle expressions with side-effects; `int min = i++ <? j++;'
works correctly.
This document was generated
by root on January, 30 2002
using texi2html