是否有没有赋值的增量运算符?
Is there an increment operator without assignment?
这真是一道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
这种行为可能吗?当然这不是必需的,但是当我不得不使用数字字面值时我会畏缩。而且我不希望运算符重载,因为在其他情况下我希望 increment/decrement 运算符正常运行...
不,这在语言中不存在。为此使用 + 1
是惯用的。有时,数字文字是合适的:)
如果您不想使用数字文字,您可以像定义 SOME_CONST
一样定义“1”:
#define ADDITIONAL 1
// somewhere else...
if (var + ADDITIONAL == SOME_CONST) {}
或者,甚至更好:
#define THE_REAL_CONST_YOU_NEED (SOME_CONST - 1)
如果你愿意,你可以这样做。例如
inline int inc(int i) { return i+1; }
如果您重视简洁,请使用像 inc 这样的简洁函数名称,如果您重视清晰度,请使用类似 one_more_than 的名称。
如果你绝对不喜欢+1
,你可以定义一个增量函数:
T inc(T var) {
return var++;
}
(我将 T 用作定义了增量运算符的类型的占位符。我假设您的 var
不一定是 int
。)
然后:
if (inc(var) == SOME_CONST) {}
看起来不错:
if ( (++var)-- == SOME_CONST) {}
这真是一道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
这种行为可能吗?当然这不是必需的,但是当我不得不使用数字字面值时我会畏缩。而且我不希望运算符重载,因为在其他情况下我希望 increment/decrement 运算符正常运行...
不,这在语言中不存在。为此使用 + 1
是惯用的。有时,数字文字是合适的:)
如果您不想使用数字文字,您可以像定义 SOME_CONST
一样定义“1”:
#define ADDITIONAL 1
// somewhere else...
if (var + ADDITIONAL == SOME_CONST) {}
或者,甚至更好:
#define THE_REAL_CONST_YOU_NEED (SOME_CONST - 1)
如果你愿意,你可以这样做。例如
inline int inc(int i) { return i+1; }
如果您重视简洁,请使用像 inc 这样的简洁函数名称,如果您重视清晰度,请使用类似 one_more_than 的名称。
如果你绝对不喜欢+1
,你可以定义一个增量函数:
T inc(T var) {
return var++;
}
(我将 T 用作定义了增量运算符的类型的占位符。我假设您的 var
不一定是 int
。)
然后:
if (inc(var) == SOME_CONST) {}
看起来不错:
if ( (++var)-- == SOME_CONST) {}