Есть ли оператор приращения без присваивания?

Это действительно вопрос языка 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

Решение

Нет, этого не существует в языке. Идиоматично использовать + 1 за это. Иногда числовые литералы уместны 🙂

6

Другие решения

Вы можете сделать это так, если хотите. например

inline int inc(int i) { return i+1; }

используйте краткое имя функции, например inc, если вы цените краткость, или что-то вроде one_more_than, если вы цените ясность.

2

Если вы не хотите использовать числовые литералы, вы можете определить «1» так же, как SOME_CONST определено:

#define ADDITIONAL 1

// somewhere else...
if (var + ADDITIONAL == SOME_CONST) {}

Или даже лучше:

#define THE_REAL_CONST_YOU_NEED (SOME_CONST - 1)
1

Если вам абсолютно не нравится +1Вы можете определить функцию приращения:

T inc(T var) {
return var++;
}

(Я использую T в качестве заполнителя для типа с определенным оператором приращения. Я предполагаю, что ваш var не обязательно int.)

а потом:

if (inc(var) == SOME_CONST) {}
1

Выглядит хорошо:

if ( (++var)-- == SOME_CONST) {}

0
По вопросам рекламы [email protected]