是否有无赋值的增量运算符? 这是一个比任何其他语言都更为复杂的C++语言问题。我很想知道是否有这样的操作符存在,或者正在开发,或者已经弃用了

是否有无赋值的增量运算符? 这是一个比任何其他语言都更为复杂的C++语言问题。我很想知道是否有这样的操作符存在,或者正在开发,或者已经弃用了,c++,increment,decrement,C++,Increment,Decrement,我想知道是否有一种方法可以在不改变其值的情况下使用增量运算符 我知道就赋值而言,++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

我想知道是否有一种方法可以在不改变其值的情况下使用增量运算符

我知道就赋值而言,
++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”,就像定义一些常量一样:

#define ADDITIONAL 1

// somewhere else...
if (var + ADDITIONAL == SOME_CONST) {}
或者,更好的是:

#define THE_REAL_CONST_YOU_NEED (SOME_CONST - 1)

如果你愿意,你可以这样做。e、 g

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

如果您重视简洁性,请使用简洁的函数名,如inc,或比重视清晰性多一个函数名。

如果您绝对不喜欢
+1
,则可以定义增量函数:

T inc(T var) {
    return var++;
}
(我使用T作为定义了增量运算符的类型的占位符。我假设您的
var
不一定是
int

然后:

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

看起来不错:


如果(++var-->=SOME_CONST){}

为什么要更改此设置?为什么
var+1
不够?@Tim这完全足够了。我只是习惯于在赋值不重要的情况下对局部变量使用增量运算符。我想知道的是C++中是否存在这样的行为。我想知道,为什么不是“代码>如果(++var==某个CONST)< /代码>,你不只是使用<代码>如果(var ==某个其他的常数)<代码>哪里<代码>某个常数= 1个/代码>蝌蚪操作符:@ ApoSHIN:好的,我也喜欢避免常数。但这确实取决于上下文
1通常是整个
100%
的表示,我认为这是合适的。如果您可以澄清上下文,也许我们可以帮助您考虑另一种选择。该语言允许重载运算符,并且可以重载递增运算符,这样它就不会修改操作数。是的,您当然可以使用运算符重载来构建它,这违反了OPs要求。但它仍然不是惯用语,在语言规范中也不存在:)这可能是自以为是的,但我绝对讨厌这种混淆的代码风格,好吧,也许你的答案不应该太严肃:)@FrankPuffer-如果问题中的原始要求值得憎恨的话。根据定义使用显式定义的运算符是可怕的,不做一些明显和普遍的事情(仅仅是
+1
)也不是更好——但是如果OP有合理的理由(我们没有分享)想要这样做,那么使用宏就是一种方法。具体的方法不太重要,你甚至可以做一个加1的宏函数(与你的答案类似,就像宏一样…)。当然看起来不错,但他在找一个没有赋值的操作符,你推荐一个加两个的操作符:)显然,他想要的只是外观。这不是一个真正合乎逻辑的问题,他提到了这一点。他只是不喜欢+1,虽然我希望增加输入值——这是它在汇编程序中所做的事情,还有一些Pascal的味道,等等。我们不妨一开始就把它作为一个模板,插入
template