Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将post fix运算符增加一个以上_C++_C - Fatal编程技术网

C++ 将post fix运算符增加一个以上

C++ 将post fix运算符增加一个以上,c++,c,C++,C,如何将后修复运算符的值增加到大于默认值1的值?例如,将后修复运算符应用于4,以便将值增加到6,而不是5 这个问题与我想要创建的for循环有关,我要在其中每隔一秒检查一个给定字符串的数量以进行验证。我认为将I变量增加2而不是1可以实现这一点 不能为内置类型重载++运算符,不能。最简单的方法是使用 var += step; 及 请注意,使用“小于”而不是“相等”会使您不必担心端点不完全对齐。当然总会有 for(i=0; i<end; ++i) { do_something(4*i);

如何将后修复运算符的值增加到大于默认值1的值?例如,将后修复运算符应用于4,以便将值增加到6,而不是5


这个问题与我想要创建的for循环有关,我要在其中每隔一秒检查一个给定字符串的数量以进行验证。我认为将I变量增加2而不是1可以实现这一点

不能为内置类型重载++运算符,不能。最简单的方法是使用

var += step;

请注意,使用“小于”而不是“相等”会使您不必担心端点不完全对齐。当然总会有

for(i=0; i<end; ++i) {
    do_something(4*i);
}
迭代次数更清晰的地方,如果不是像前面那样的范围。任何对你来说最清楚的事情。

你可以这样做:

for(int i = 0; i < n; i += x){ /* do something */ }

除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;
}
如您所见,y接收到旧值x,x增加了2

我们所做的只是y=postincx,2。它不像y+=2的后递增重载那样具有华丽的语法糖分,但它在表达式中起到了很好的作用,消除了引入临时变量时对代码的笨拙分解


如果您不需要后缀语义,甚至不需要表达式的结果值,那么只需使用var+=delta。

我不知道您为什么坚持使用后缀。对于一个简单的For循环,前缀是等价的,所以请选择它,因为后缀意味着一个副本。无论如何,除了表面上的

for(i=0; i<end; i+=n) ...
如果你只增加2,你也可以说

for(i=0; i<end; ++++i) ...


<>但是哪一个更有效取决于优化器,它们最可能是相同的。< /P>这是C还是C++问题?增量总是2吗?为var+=2;不足够?奇怪的是,C++让你这样做,但我肯定不会推荐它。它是for for for循环,我正在创建。我需要它检查字符串的每一个字符以进行验证。为了实现这一点,我希望增量增加2,而不是默认值。也就是说,除非有更有效的方法来实现这一点,否则我不认为我会简单地使用var+=2;。编译器通常足够聪明,可以优化这样的小代码。您应该完全创建一个类并重写++运算符。。。人们会喜欢保持这种状态!var+=步骤不是后缀;它返回新的值。@Kaz第三个表达式的值没有被使用,不管它是pre-还是post-都是无关的。@Leushenko问题说是post-fix运算符。如果未来的访问者正在寻找一个实际的post fix运算符,该运算符的增量可能超过一个,则可能会在此处搜索。第二个运算符未定义-。@CommanderCorianderSalamander抱歉,我不明白为什么。一个答案引用§1.9/15。运算符结果的值计算之前,对运算符操作数的值计算进行排序。然后给出了例子++++i//明确的行为++++i被解析为++++i。不管怎样,如果我明白为什么它没有定义,我会很乐意删除它。目前我正在添加+++I,++I,我希望它更安全。@commandercoriandersallamander同样根据+++I是没有定义的。然而,有相反的观点。也许这就是C++03和C++11之间的区别?
for(i=0; i<end; i+=n) ...
for(i=0; i<end; ++++i) ...
for(i=0; i<end; ++i, ++i) ...