一元否定运算符会出现在函数调用之前吗?

问题描述 投票:0回答:3

我手边没有编译器,但这激起了我的好奇心。如果我有这样的代码:

float a = 1;
float b = 2;

-a.add(b);

它会运行为:

add(-a, b);

-add(a, b);
c++ operators operator-precedence
3个回答
3
投票

除了

float
没有
add
方法之外,当然还有第二个 - 除非语言以某种方式知道
add
函数的属性。否则,这可能是完全错误的:想象一下,如果将
-f(x)
替换为
f(-x)
来代替
f(x) = x * x
,会发生什么!

但是,如果编译器知道

add
只是一个加法(例如,它 inlines 函数),则允许选择任何它想要的方式,只要结果保持不变。

对于表达式

-a.add(b)
,肯定
(-a) + b
-(a + b)
不同,因此编译器只会选择正确的一个。根据优先级表,函数调用具有更高的优先级,因此将选择
-(add(a, b))


1
投票

后者,因为当涉及加法/减法时,符号很重要。


1
投票

假设您定义了类似

float add(float a, float b) { return a + b; }
的内容,那么它将是第二个。函数调用具有比一元减法更高的运算符优先级,因此它会调用该函数,然后再调用一元减结果。

© www.soinside.com 2019 - 2024. All rights reserved.