【发布时间】:2015-08-06 10:15:48
【问题描述】:
(注意:我不是在问前置增量与后置增量的定义,或者它们在 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;
将作为输出给出
x++ == 3
++x == 5
x-- == 5
--x == 3
【问题讨论】:
-
The Development of the C Language (by Ritchie) 包含一段关于增量运算符以及后缀/前缀的段落,但没有详细说明。
-
副作用才是有用的。
-
[推测警告] 在使用 C 或 C++ 进行系统编程时,您最终会编写大量代码。任何能帮助你保持简洁的东西都是好的。前缀和后缀运算符允许程序员浪费更少的空间来处理变量。我认为这就是他们添加它的原因。不过,我很惊讶 C 没有变量值交换运算符。
-
@Dai 当我开始学习 C 时,我会使用任何看起来 l33t 的技巧,今天我尊重 POLA 和其他各种原则。
Any fool can write code that a computer can understand. Good programmers write code that humans can understand. ~Martin Fowler -
是什么让您说“计算中发生了哪些变化,这种区别在今天不再那么有用了”?对于缺少单个
inc/dec指令的处理器,它们可以轻松地替换为add r0,r0,#1(ARM 示例)。 post 和 pre 之间的区别在今天和以往一样重要。
标签: c++ c post-increment decrement pre-increment