在函数调用之前,一元运算符会否定运算符

Would unary negate operator come before the function call?

本文关键字:运算符 一元 函数调用      更新时间:2023-10-16

我没有方便的编译器,但这渴望我的好奇心。如果我有这样的代码:

float a = 1;
float b = 2;
-a.add(b);

会运行为:

add(-a, b);

-add(a, b);

除了float没有add方法的事实,除非语言以某种方式知道add函数的属性。否则可能是错误的:想象一下,如果您将-f(x)替换为f(x) = x * x

会发生什么情况

但是,如果编译器知道add只是一个添加(例如,IT Inlines 函数),则可以选择任何想要的方法,只要结果保持不变。

对于表达式-a.add(b),绝对是(-a) + b-(a + b)不同,因此编译器只会选择正确的 CC_1。根据优先表,功能调用的优先级更高,因此将选择-(add(a, b))

后者,因为符号在加法/减法方面很重要。

假设您定义了类似float add(float a, float b) { return a + b; }的内容,则将是第二个。函数调用具有更高的运算符优先级,因此将其称为函数,然后单位减去结果。