Мы используем
x += y
вместо
x = x + y
И аналогично для *,/,-
и другие операторы. Ну как насчет
x min= y
вместо
x = std::min(x, y)
? Существует ли обычно используемая идиома для этой команды, не требующая (невозможного) расширения языка с другим оператором?
Это, конечно, не идиоматично, но вы можете использовать то, что называется именованные операторы (см. эти Q&Как Вот а также Вот, разработано @Yakk и @KonradRudolph), и напишите
x <min>= y;
что стало возможным благодаря перегрузке operator<
а также operator>
в сочетании с умным завернутым named_operator
, Полный код указан по ссылке выше, но используется такой код:
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);
}
С помощью std::min
в качестве аргумента шаблона для параметра шаблона F
, обновит lhs выражения с минимумом lhs и rhs.
Вы не можете расширить язык таким образом. Ближайший вы можете
прийти это что-то вроде:
template <typename T, typename U>
T&
mineq( T& lhs, U rhs )
{
if ( rhs < lhs ) {
lhs = rhs;
}
return lhs;
}
Это позволило бы написать:
mineq( x, y );
Однако я сомневаюсь, стоит ли это беспокоить.
NO. Там нет такой вещи, вам придется делать с std::min(x,y);
Нет, невозможно создавать новые пользовательские операторы.
У вас есть несколько доступных решений:
llama_min_age = std::min(x, y);
llama_min_age = (x < y ? x : y);
Или даже макрос, если вы хотите:
#define MIN(x, y) ((x) < (y) ? (x) : (y))
О макросе: он может привести к серьезной ошибке, поэтому я бы предпочел использовать одно из первых двух решений.
Вы не можете писать такие предложения, они зарезервированы для встроенного синтаксиса.
Варианты у вас есть:
x = std::min(x,y)
или же
x = y < x ? y : x;
или же
if (y < x) x = y;
C ++ имеет ограниченный набор операторы а также ключевые слова.
То, что вы пытаетесь сделать, находится за пределами спецификации C ++ и невозможно.
Вы можете сделать сравнение и назначение с этой однострочником, если вы хотите:
x = (x < y) ? x : y;