We use
x += y
instead of
x = x + y
And similarly for *,/,-
and other operators. Well, what about
NO. There is no such thing, you'll have to do with std::min(x,y);
You can't extend the language in this way. The closest you can come is something like:
template <typename T, typename U>
T&
mineq( T& lhs, U rhs )
{
if ( rhs < lhs ) {
lhs = rhs;
}
return lhs;
}
This would allow writing:
mineq( x, y );
I question whether it's worth the bother, however.
C++ has a limited set of operators and keywords.
What you are trying to do is outside the C++ specification and is not possible.
You can do the comparison and assignment with this one-liner if you want:
x = (x < y) ? x : y;
It's certainly not idiomatic, but you might be able to use something called named operators (see these Q&As here and here, developed by @Yakk and @KonradRudolph), and write
x <min>= y;
which is made possible by overloading operator<
and operator>
, combined with a clever wrapped named_operator
. The full code is given by the link above, but uses code like
template <typename T1, typename T2, typename F>
inline auto operator >(named_operator_lhs<T1, F> const& lhs, T2 const& rhs)
-> decltype(lhs.f(std::declval<T1>(), std::declval<T2>()))
{
return lhs.f(lhs.value, rhs);
}
Using std::min
as template argument for the template parameter F
, would update the lhs of the expression with the min of the lhs and rhs.
You cannot write this kind of sentences, they are reserved for the built-in syntaxt
No, it is not possible to create new custom operators.
You have a few available solutions though:
llama_min_age = std::min(x, y);
llama_min_age = (x < y ? x : y);
Or even a macro if you want to:
#define MIN(x, y) ((x) < (y) ? (x) : (y))
About the macro: it can lead to vicious bug, so I would prefer to use one of the first two solutions.