Sha*_*ang 10 c c++ pre-increment post-increment decrement
(注意:我不是在询问预增量与后增量的定义,或者它们在C/C++中的使用方式.因此,我不认为这是一个重复的问题.)
C的开发人员(Dennis Ritchie等人)出于很好的理由创建了增量和减量运算符.我不明白为什么他们决定创造前后增量/减量的区别?
我的感觉是,当C开发时,这些运算符比今天更有用.大多数C/C++程序员使用其中一种,而来自其他语言的程序员今天发现这种区别奇怪且令人困惑(注意:这完全基于轶事证据).
他们为什么决定这样做,以及计算上发生了什么变化,这种区别今天没那么有用?
为了记录,可以在C++代码中看到两者之间的差异:
int x = 3;
cout << "x = 3; x++ == " << x++ << endl;
cout << "++x == " << ++x << endl;
cout << "x-- == " << x-- << endl;
cout << "--x == " << --x << endl;
Run Code Online (Sandbox Code Playgroud)
将作为输出
x++ == 3
++x == 5
x-- == 5
--x == 3
Run Code Online (Sandbox Code Playgroud)
usr*_*301 10
当时硬件广泛支持递增和递减1:单个操作码,并且速度快.这是因为"递增1"和"递减1"是代码中非常常见的操作(直到今天).
post和precrement表单仅影响在生成的机器代码中插入此操作码的位置.从概念上讲,这模仿了" 在使用结果之前或之后增加/减少".在一个声明中
i++;
Run Code Online (Sandbox Code Playgroud)
没有使用'之前/之后'概念(因此它的作用相同++i;),但是在
printf ("%d", ++i);
Run Code Online (Sandbox Code Playgroud)
它是.现在,这种区别与设计语言C时的区别同样重要(这个特定的习语是从它的前身"B"中复制而来的).
这个特征[PDP-7的"自动增量"存储单元"]可能会向Thompson [Ken Thompson,他设计的"B",C的前身)建议这样的操作员.使它们成为前缀和后缀的概括是他自己的.实际上,自动增量单元并没有直接用于运算符的实现,而且创新的更强烈动机可能是他观察到++ x的翻译小于x = x + 1的翻译.
感谢@dyp提及此文档.
当你倒计时时,n无论是预减还是减后都是非常重要的
#include <stdio.h>
void foopre(int n) {
printf("pre");
while (--n) printf(" %d", n);
puts("");
}
void foopost(int n) {
printf("post");
while (n--) printf(" %d", n);
puts("");
}
int main(void) {
foopre(5);
foopost(5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
查看在ideone上运行的代码.
| 归档时间: |
|
| 查看次数: |
1010 次 |
| 最近记录: |