[英]Pre vs Post Increment
我得到了前后增量的基础,但是当它实际发生在后增量时,我无法理解。
例如,在以下增量后代码中:
int counter = 10;
int result = 0;
result = counter++ + 10;
cout << "Counter: " << counter << endl;
cout << "Result: " << result << endl;
我知道Counter会出现11,结果为20.结果是20,因为整个函数正在运行, 然后当程序返回0时加上+1; ?
究竟是什么时候加上+1?
谢谢
究竟是什么时候加上+1?
根据标准 :
在修改操作数对象之前,对++表达式的值计算进行排序。
从外行人的角度来看:
counter
计算进行排序,这可能是声明的整个RHS的一部分,或者只是counter++
。 counter += 1
计算进行排序。 要记住两件事。
在counter++
的情况下:
该项的值是counter
增加之前的值。
评估该术语的副作用是增加counter
的值。
后增量运算符:后增量运算符用于在完全执行表达式后递增变量的值,其中使用后增量。 在Post-Increment中,值首先在表达式中使用,然后递增。
所以在你的情况下
result = counter++ + 10;
在本声明中使用后增量发生,显然它会在下一个语句中反映出来。
另外,为了更好地理解,您可以考虑这些松散描述的示例:
the_object
的the_type
作为这样的功能: the_object = the_object + 1;
return the_object;
the_object
的the_type
作为这样的功能: 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;
编译程序时:
result =
,因此它应该首先确定在=
的右侧放置的内容然后生成机器代码以将其分配给=
的左侧,即result
。 counter
但该语句尚未结束,因为;
尚未到达。 所以现在它知道它也必须用counter
做一些事情。 编译器看到++
但语句尚未结束。 所以现在它知道它必须考虑生成机器代码以首先执行counter++
。
编译器看+
。 所以,现在它知道它必须考虑生产机器代码中加入右侧+
和左侧+
这是counter++
。
编译器见10;
最后声明已经结束。 所以现在它知道它需要知道的一切! 它知道,生产机器代码执行后, counter++
,它应该产生的机器代码添加10到outcome_of它。 然后它应该生成机器代码以将result_of分配给result
。
程序运行时:
counter++
现在counter
是由1因此它是11,但outcome_of(递增counter++
)是以前的值counter
是10
counter++
)+ 10 现在outcome_of ( outcome_of ( counter++
)+ 10)是outcome_of (10 + 10),即20
result =
outcome_of ( outcome_of ( counter++
)+ 10) 现在result
是20
另请注意,所描述的每个阶段都只是关于
result = counter++ + 10;
不管之后会发生什么。 以前的意思
cout << "Counter: " << counter << endl;
cout << "Result: " << result << endl;
很明显在main()
返回0之前。
在我看来,你应该放轻松,通过编写和运行一些程序的经验来学习它!
祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.