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

本文关键字:运算符 实现 类型 为什么 | 更新日期: 2023-09-27 18:20:16

浮点值加减1有什么特别之处,值得使用专用运算符?

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

我从未觉得有必要使用这样的结构;这对我来说真的很奇怪。但如果必须的话,我会对感到更舒服

a += 1;

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

这有什么原因吗?

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

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


注意,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.51.5

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

我同意你的看法,这有点奇怪——"++"运算符对整数值有一些特殊的含义:

  1. 它转换为INC汇编指令
  2. 它表示将值更改一个特殊的量(即尽可能小的量),因此它在迭代中使用

然而,对于浮点数字,值1.0不是任何特殊值(从机器的角度来看)。你也不应该在迭代中使用它(换句话说:如果你正在使用它,你通常应该考虑使用int),因为它没有指定的INC汇编指令。