getItself函数在 java与C++

getItself function in java vs C++

本文关键字:C++ java 函数 getItself      更新时间:2023-10-16

我有一个函数:

(C++(

int a,b;
int getItself(int itself,int dummy)
{
return itself;
}
int a=10;
int b=20;
a=getItself(b,b=a);

(爪哇(

public static int getItself(int itself, int dummy)
{
return itself;
}
public static void main(String[] args)
{
int a = 10;
int b = 20;
a = getItself(b, b = a);
}

结果令人惊讶:C++不能做交换,而Java可以!我不太明白为什么它会以这种方式发生。我以为两者都会首先将 b 复制到"自身",将 a 设置为 b,并将 b 复制到"虚拟"。

我将这段代码归功于这篇文章:如何在 Java 中编写基本的交换函数

这是因为评估的顺序。在java中,它从左到右是固定的,而在c ++中,它是未定义的,并且是编译时选择。

你的 getItSelf 函数取决于是先传递 b 还是先计算 b=a。在java中,b将首先传递。

请参阅 C++ 评估顺序

另请参阅 java 的评估顺序