1

手元にコンパイラはありませんが、これは私の好奇心をかきたてます。次のようなコードがある場合:

float a = 1;
float b = 2;

-a.add(b);

次のように実行されますか?

add(-a, b);

また

-add(a, b);
4

3 に答える 3

3

floatもちろん、メソッドを持たないという事実は別としてadd、言語が何らかの形でadd関数のプロパティを知っている場合を除きます。そうしないと、明らかに間違っている可能性があります。 forに置き換える-f(x)とどうなるか想像してみてください。f(-x)f(x) = x * x

ただし、コンパイラがそれaddが単なる追加であることを認識している場合 (たとえば、関数をインライン化する場合)、結果が変更されない限り、任意の方法を選択できます。

式の場合-a.add(b)、は とは明らかに(-a) + b異なる-(a + b)ため、コンパイラは正しいものを選択します。優先順位表によると、関数呼び出しの方が優先度が高いため、-(add(a, b))選択されます。

于 2012-11-05T00:27:09.517 に答える
1

後者は、加算/減算に関して符号が重要になるためです。

于 2012-11-05T00:29:22.547 に答える
1

のようなものを定義すると仮定するとfloat add(float a, float b) { return a + b; }、それは 2 番目になります。関数呼び出しは、単項マイナスよりも演算子の優先順位が高いため、関数を呼び出してから、単項マイナス結果を呼び出します。

于 2012-11-05T00:31:34.110 に答える