Это действительно вопрос языка C ++ больше всего на свете. Мне любопытно узнать, существует ли какой-либо такой оператор, или он разрабатывается, или устарел.
Мне интересно, есть ли способ использовать оператор приращения без изменения его стоимости.
я знаю это ++var
эквивалентно var += 1
насколько назначение и что выражение будет оценивать var + 1
(если это префикс).
Это может быть несерьезно, но когда у меня
if (var + 1 == SOME_CONST) {}
Я хотел бы написать это больше как
if (++var == SOME_CONST) {} //not what I want
но без изменения значения var:
int varDummy = var;
if (++varDummy == SOME_CONST) {}
// Now I want (varDummy == var) to evaluate true, so I wouldn't need varDummy
Возможно ли такое поведение? Конечно, это несущественно, но я просто съеживаюсь, когда мне приходится использовать числовые литералы. И я не хочу перегрузки операторов, потому что в других контекстах я хочу, чтобы операторы увеличения / уменьшения работали нормально …
Нет, этого не существует в языке. Идиоматично использовать + 1
за это. Иногда числовые литералы уместны 🙂
Вы можете сделать это так, если хотите. например
inline int inc(int i) { return i+1; }
используйте краткое имя функции, например inc, если вы цените краткость, или что-то вроде one_more_than, если вы цените ясность.
Если вы не хотите использовать числовые литералы, вы можете определить «1» так же, как SOME_CONST
определено:
#define ADDITIONAL 1
// somewhere else...
if (var + ADDITIONAL == SOME_CONST) {}
Или даже лучше:
#define THE_REAL_CONST_YOU_NEED (SOME_CONST - 1)
Если вам абсолютно не нравится +1
Вы можете определить функцию приращения:
T inc(T var) {
return var++;
}
(Я использую T в качестве заполнителя для типа с определенным оператором приращения. Я предполагаю, что ваш var
не обязательно int
.)
а потом:
if (inc(var) == SOME_CONST) {}
Выглядит хорошо:
if ( (++var)-- == SOME_CONST) {}