为什么C#为浮点类型实现前/后递增/递减运算符?

时间:2012-01-15 14:16:59

标签: c# operators language-design

在浮点值中添加/减去1值得专用的运算符有什么特别之处?

double a = -0.001234129;
a++; // ? 

我从未觉得需要使用这样的结构;它看起来很奇怪。但如果我不得不这样做,我会感到更舒服:

a += 1;

也许是因为我强大的C ++背景,但对我而言,它使变量看起来像数组索引器。

这有什么理由吗?

2 个答案:

答案 0 :(得分:8)

++--运算符对所有其他数字类型进行操作,为什么浮点数会例外?对我来说,这将是更令人惊讶的选择。


请注意,C ++也为浮点实现了这些:

#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
    double a = 0.5;
    cout << a << '\n';
    ++a;
    cout << a << '\n';
    return 0;
}

输出:

0.5
1.5

答案 1 :(得分:2)

我的猜测是,原因是与C / C ++的一致性。

我同意你的意见,它有点奇怪 - '++'运算符对整数值有一些特殊含义:

  1. 它转换为INC汇编指令,
  2. 它表示将值更改特殊数量(即以最小可能的数量),因此在迭代中使用它。
  3. 但是,对于浮点数,值1.0不是任何特殊值(从机器的角度来看)。您也不应该将它用于迭代(换句话说:如果您正在使用它,您通常应该考虑使用int),并且它没有指定的INC汇编指令。