如何将post-fix运算符增加到超过默认值1?(即将post-fix运算符应用于4以便将值增加到6而不是5)
这个问题与我要创建的for循环有关,我要检查给定字符串的每个第二个数字以进行验证。我认为将i变量递增2而不是1将实现此目的。
答案 0 :(得分:3)
你不能为内置类型重载++运算符,不能。最简单的方法是使用
var += step;
和
for(i=0; i<end; i+=4) {
...
}
请注意,使用小于而不是相等会导致您不要强调终点不准确排队。当然总有
for(i=0; i<end; ++i) {
do_something(4*i);
}
其中迭代次数更清晰,如果不是前一次的范围。无论你最清楚什么。
答案 1 :(得分:3)
你可以这样做:
for(int i = 0; i < n; i += x){ /* do something */ }
答案 2 :(得分:1)
我不知道为什么你坚持使用postfix。对于一个简单的for
循环,前缀是等价的,所以更喜欢它,因为postfix意味着一个副本。无论如何,除了明显的
for(i=0; i<end; i+=n) ...
如果你只增加2,你也可以说
for(i=0; i<end; ++++i) ...
或
for(i=0; i<end; ++i, ++i) ...
但哪一个更有效取决于优化器(最有可能它们最终相同)。
答案 3 :(得分:0)
除1之外的步骤没有修复后增量运算符。obj += 2
表达式返回新值,而不是旧值。
如果obj是一个类,你可以破解你的+=
运算符重载来返回旧值,但这不是一个好主意。
我们可以做的是创建一个名为postinc
的简单模板函数,它以类型通用的方式为我们执行此操作:
#include <iostream>
template <typename OBJ, typename DELTA>
OBJ postinc(OBJ &obj, const DELTA &delta)
{
OBJ oldval = obj;
obj += delta;
return oldval;
}
using std::cout;
using std::endl;
int main()
{
int x = 39;
int y = postinc(x, 3); // <-- now we can do this
// x and 3 can be any objects supporting x += 3
cout << "x = " << x << "; y = " << y << endl;
return 0;
}
输出:
x = 42; y = 39
如您所见,y
收到x
的旧值,x
递增2
。
我们所做的只是y = postinc(x, 2)
。它并不像y += 2
的后递增重载那样花哨的语法糖,但是它可以很好地坐在表达式中,消除了引入临时变量的代码的笨拙分解。
如果您不需要后缀语义,甚至根本不需要表达式的结果值,那么只需使用var += delta
。