我没有编译器方便,但这让我好奇。如果我有这样的代码:
float a = 1;
float b = 2;
-a.add(b);
它会以:
运行add(-a, b);
或
-add(a, b);
答案 0 :(得分:3)
除了float
没有add
方法,当然还有第二种方法 - 除非语言以某种方式知道add
函数的属性。否则它可能是完全错误的:想象如果用-f(x)
f(-x)
取代f(x) = x * x
会发生什么!
但是,如果编译器知道add
只是一个加法(例如,内联函数),则允许选择它想要的任何方式,只要结果保持不变。
对于表达式-a.add(b)
,绝对(-a) + b
与-(a + b)
不同,因此编译器只会选择正确的-(add(a, b))
。根据{{3}},函数调用具有更高的优先级,因此将选择{{1}}。
答案 1 :(得分:1)
后者,因为符号在加/减时很重要。
答案 2 :(得分:1)
假设您定义类似float add(float a, float b) { return a + b; }
的内容,那么它将是第二个。函数调用的运算符优先级高于一元减号,因此它会调用函数,然后一元减去结果。