是否有没有赋值的增量运算符
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
这种行为可能吗?当然,这不是必需的,但是当我必须使用数字文字时,我只是畏缩。而且我不希望运算符重载,因为在其他上下文中,我希望递增/递减运算符的行为正常......
不,这在语言中不存在。为此使用+ 1
是惯用的。有时,数字文字是合适的:)
如果你
愿意,你可以这样做。 例如
inline int inc(int i) { return i+1; }
如果您重视简洁性,请使用简洁的函数名称,例如 Inc,如果您重视清晰度,请使用类似 one_more_than 的名称。
如果您不想使用数字文字,则可以像定义SOME_CONST
一样定义"1":
#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) {}
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 有没有办法将 for 循环结果返回到像三元运算符这样的函数中?
- 运算符重载C++、(+、-、*、/ 等)有没有比复制、替换和粘贴更聪明的方法?
- 我的字符串类的 += 运算符有问题,它没有正确连接字符串
- 有没有办法包括多个!=运算符
- 对于列表排序,有没有办法使用相同的参数让多个运算符重载?
- 有没有办法让函数在 c++ 中将运算符作为参数
- 在指向类类型的指针中,有没有任何方法可以用outusing*调用类运算符
- 有没有办法在不重载<<运算符的情况下打印出 std::list 的内容?
- 布尔运算符,在C++中有没有一种简单的方法可以做到这一点
- 有没有一种方法可以为枚举设置运算符=
- 是否有没有赋值的增量运算符
- 有没有办法将<<运算符与字符串流和字符串与空格一起使用?
- 有没有办法创建一个线程,但在不使用运算符的情况下使用 C++11 延迟它的执行=
- 有没有办法在没有 .* 或 ->* 运算符的情况下调用成员函数
- 有没有一种聪明的方法可以禁止通过派生类之一隐藏基类的运算符函数
- 有没有办法在类内部而不是作为类的朋友重载提取运算符
- 如果我创建一个列表:<T>:迭代器,有没有办法重载++(增量)运算符?
- 有没有办法使用用户定义的运算符<结构在QSortFilterProxyModel中对该结构的QVariants进行排序?