预增量和后增量

时间:2012-09-23 10:30:39

标签: c++ operators post-increment pre-increment

我无法理解后续增量(++),预增量(--)和加法/减法如何在一个示例中协同工作。

x++表示将1添加到变量中。

x--表示从变量中减去1。

但我对此示例感到困惑:

int x = 2, y = 3, z = 1;`

y++ + z-- + x++;

我认为这意味着3(+1) + 1(-1) + 2(+1)这意味着结果应为7。

但是当我编译它时,我得到6。我不明白。

int main() {
  int x=2, y=3, z=1;
  int result;

  result = y++ + z-- + x++;    //this returns 6

  cout << result << endl;
  return 0;
}

10 个答案:

答案 0 :(得分:10)

因为后缀operator++在递增变量之前返回原始值。前缀operator++递增变量并返回对它的引用。可以通过示例轻松说明该行为:

#include <iostream>

int main()
{
  int n = 1;
  std::cout << n++ << "\n"; // prints 1
  std::cout << n << "\n";   // prints 2

  int m = 10;
  std::cout << "\n";
  std::cout << ++m << "\n"; // prints 11 
  std::cout << m << "\n";   // prints 11
}

答案 1 :(得分:6)

 result = y++ + z-- + x++;
           3     1      2  = 6

如果再次执行此操作

 result1 = y++ + z-- + x++;
          4     0      3  = 7

原因

在递增变量之前,

operator++返回原始值。

++operator返回递增的值

--与上面的减法相同

答案 2 :(得分:5)

当您撰写x++时,它会使用当前值x,然后将其增加一。

如果您想先增加++x,则需要写一下。{/ p>

答案 3 :(得分:3)

Pre-increment operator(++p)首先增加值并分配它,post increment operator(p++)首先分配值,然后执行增量操作。这里所有变量都是后增量,即它最初分配其值(在缓冲区上)然后增加(对于y和x乘以1)并将z减少1.即 最初在缓冲区中分配3 + 1 + 2(对缓冲区值执行加法)然后执行递增/递减,如x = 3,y = 4且z = 0

有关详细信息,您可以阅读What is the correct answer for cout << c++ << c;?Why are these constructs (using ++) undefined behavior?个问题的答案

答案 4 :(得分:2)

++问题的位置。

  

如果++位于变量之前,例如++counter,返回的值是   计数器增加后的值。如果++跟随   变量,例如counter++,返回的值是计数器中的值   在它增加之前。

(source)

答案 5 :(得分:1)

原因很简单。 这里使用关联原则,根据运算符的优先级计算值。

另外X++X--表示......使用然后更改...... 它将首先使用该值并增加或减少它。 如果你想获得7的输出...... 试试这个..它可能有用......

result = ++y + z-- + x++;

答案 6 :(得分:1)

后增量/后增量会增加/减少变量,但会计算变量的“先前”值。

所以表达式result = y++ + z-- + x++的行为类似于:

result = y + z + x;  // result == 6

// perform the 'post' operations
y += 1;
z -= 1;
x += 1;

但是,请记住,这必然是编译器执行评估的严格方式。对于此表达式,结果已明确定义,您将在示例中结束。在同一个表达式中使用多个递增/递减操作时,很容易将未定义的行为合并到您无法从表达式中特别期待的任何内容中。有关详细信息,请参阅Why are these constructs (using ++) undefined behavior?

答案 7 :(得分:0)

i++ / i--是变量的后递增和递减...

因此在我们的表达式中,它将采用初始值来解决然后将inc / dec加1。

int x = 2, y = 3, z = 1;
y++ + z-- + x++;
2   + 3   + 1    = 6

答案 8 :(得分:0)

您还可以通过while循环实现不同的行为:

#include <iostream>
void main{
int count = 0;
    while (count < 5 )
    {
    std::cout << "counter is: " << count << std::endl
    // replace this line with one of the lines below at a time
    }
}

考虑以下count

增量的表达式
++count  // the variable 'count' will grow from 0 to 4
count++  // ditto, weird as it seems; 'count' grows nonetheless
count = ++count  // the old 'count' becomes 'count + 1'
count = count++  // endless loop: back to square zero time and time again

同样,您可以通过前缀

获取更多有关do-while循环的信息
count = 0;
do
{
    std::cout << ++count << "\n";
} while (count < 5);  // prints out 1 to 5

与后缀

count = 0;
do
{
    std::cout << count++ << "\n";
} while (count < 5);  // prints out 0 to 4

答案 9 :(得分:-2)

Dim i As Integer = 10
    Dim b As Integer
    Dim c As Integer
    Dim d As Integer
    b = ++i
    c = i + 1
    d = b + c
    Response.Write("<br/>")
    Response.Write("The Value of ++i :-" & b)
    Response.Write("<br/>")
    Response.Write("The Value of i++ :-" & c)
    Response.Write("<br/>")
    Response.Write("Answer is " & d)

输出:

The Value of ++i :-10
The Value of i++ :-11
Answer is 21 

这意味着什么 ++ var返回原始值和 var ++返回递增的值。