是否有一个以上的帖子增量?

时间:2015-05-04 22:42:04

标签: java c# math

刚才有一个有趣的想法。在C#和Java等语言中,我知道在增量和减量方面,你可以做一个帖子,或者预先增加/减少。像这样:

int a = 5;
Console.WriteLine(a++); // Would print out 5,
                        // And then increment a to 6

Console.WriteLine(++a); // Would then print out 7 because 
                        // it increments a before printing it out

但是,我想知道是否有任何人可能做这样的事情:

int a = 5;
Console.WriteLine(a += 5); // Would print out 5,
                           // And then increment a to 10

Console.WriteLine(a =+ 5); // (Or something along those lines)
                           // To print out 15 at this point

只是感兴趣并且并不知道在哪里或如何寻找答案,所以想知道SO上是否有人会对此有所了解。谢谢!

修改:在评论中添加了我的问题

确切地定义了a += 5a =+ 5的位置?我从来没有见过第二个使用过的。它是否存在......?他们编译成同样的东西吗?

5 个答案:

答案 0 :(得分:4)

在过去,C语言提供了这种语法作为从变量中添加或减去值的快捷方式。

 a =+ 5;
 b =- 5;

但是在C的生命早期,dmr(祝福的记忆)和ken弃用了这种语言,而不是

 a += 5;
 b -= 5;
正好同样的目的,因为它很容易编写b=-5,这意味着与b -= 5完全不同的东西。这经验丰富的"程序员记得重写一堆代码以匹配新的语言规范。

因此,a++--b中的构造中从未出现过前或后增量语义。

答案 1 :(得分:1)

我所知道的任何语言都没有这样的操作符,但你可以编写自己的C#函数来做同样的事情!

static void postAdd<T>(ref T lhs, T rhs) {
    T saved = lhs;
    lhs += rhs;
    return saved;
}

这在Java中是不可能的,因为Java不支持使用ref传递引用。

答案 2 :(得分:1)

Console.WriteLine(a+=5);

在语言中完全合法。它是一种预增量运算符,因为它会在将值返回到a调用之前递增变量WriteLine

= +不是有效的运算符,因为它不是由C#标准定义的。可以在此页面上找到所有C#运算符:https://msdn.microsoft.com/en-us/library/ewkkxkwb.aspx

无法创建自己的运算符,因为编译器必须知道如何创建表达式树或解析该行以生成IL。除此之外,通过大量的工作,尤其是Rosyln的发布,理论上你可以创建自己的语言(如IronPython),并拥有这些操作符。

您最接近自己的运营商的是扩展方法,例如:

public class Extensions
{
    public static int AddMul(this int x, int add, int mull)
    {
        return x * mull + add;
    }
}

将使用如下:

int x = 4;
int y = x.AddMul(2, 3);  //y now equals 14

答案 3 :(得分:0)

以下打印所需的结果,但不是很漂亮的代码:

int a = 5;
System.out.println(a+=5);
System.out.println((a+=5)-5);
System.out.println(a);

打印:

  

10,10,15

增量后,

a+=5返回a的值。 (a+=5)-5递增a并在递增之前返回其值。

a=+5只需编译为a=5。这将执行分配和unary plus operator。它类似于a=-5a等于负5)。

System.out.println(+5);

打印:

  

5

C#中,等效代码生成相同的输出:

int a = 5;
Console.WriteLine(a+=5);
Console.WriteLine((a+=5)-5);
Console.WriteLine(a);
Console.WriteLine(+5);

打印:

  

10,10,15,5

答案 4 :(得分:0)

没有。 a += 5不是后期增量。这是一个增量。

a++是后增量。并且++a是预增量。