Pre vs Post Increment

Pre vs Post Increment

本文关键字:Increment Post vs Pre      更新时间:2023-10-16

我得到了预先增量和帖子的基础,但是在实际发生在帖子上时,我的头脑将其包裹起来。

例如,在以下文章增量代码中:

int counter = 10;
int result = 0;
result = counter++ + 10;
cout << "Counter: " << counter << endl;
cout << "Result: " << result << endl;

我了解计数器将以11的形式出现,并在20时结果。结果在20时出现,因为整个功能正在运行,然后然后在程序转到程序时添加 1返回0;?

何时添加 1?

谢谢

何时添加 1?

根据标准:

在修改操作数对象之前,对 表达式的值计算进行了测序。

从外行的角度来看:

  1. counter的计算是测序的,它可以是该语句的整个RH的一部分,也可以是术语counter++
  2. 在程序中的下一个语句进行测序之前,对counter += 1的计算进行了测序。

有两件事要牢记。

  1. 术语的值 - 它在表达式中评估的内容。
  2. 术语评估的副作用。

对于counter++

该术语的值是counter的值。
评估该术语的副作用是增加counter的值。

也为了更好地理解您可以考虑这些宽松描述的示例:

  • 想想the_typethe_object pre 作为这样的函数:
the_object = the_object + 1;
return the_object;
  • 现在想想 post - the_typethe_object increment作为这样的函数:
the_type backup_of_the_object;
backup_of_the_object = the_object;
the_object = the_object + 1;
return backup_of_the_object;

现在考虑:

result = counter++ + 10;

编译程序时:

  1. 编译器在行的开头看到result =,所以应首先确定=右侧放置的内容然后产生机器代码将其分配到 =result
  2. 编译器看到counter,但该语句尚未结束因为尚未达到;。所以现在知道它还必须使用counter
  3. 编译器看到++,但该语句尚未结束。现在知道它必须考虑生成机器代码以执行 counter++首先。

  4. 编译器看到+。所以现在知道它必须考虑生产机器代码以添加+的右侧和+的左侧,即counter++

  5. 编译器看到10;,最后该语句已经结束。所以现在它知道需要知道的一切!它知道生产后执行counter++的机器代码,应产生机器代码将10添加到 atumcome_of IT中。然后应该生产机器代码以分配 atumcome_of result

程序运行时:

  1. CPU应该执行counter++

现在counter增加了1个,因此是 11 ,但是 atumcome_of ( counter++(是counter的先前值,是 10

  1. CPU应该执行 atumcy_of (counter++( 10

现在 atumcome_of ( atumcome_of ( counter++( 10(是/em> (10 10(, 20

  1. CPU应该执行result = atumcome_of ( atumecon_of (counter++( 10(

现在result 20

另外,请注意,所描述的每个阶段仅大于
result = counter++ + 10;
不管以后会发生什么。

之前的意思
cout << "Counter: " << counter << endl;
cout << "Result: " << result << endl;

很明显main()返回0。

我认为,您应该放松一下,并通过编写和运行一些程序通过经验来学习它!

祝你好运!

inf increment Operator:完全使用后递增的表达式后,使用后启动操作员来递增变量的值。在收入后,值首先在表达式中使用,然后递增。

所以在您的情况下

result = counter++ + 10;

在此语句中使用后进行了增量,显然它反映在下一个语句中。