在函数调用之前,一元运算符会否定运算符
Would unary negate operator come before the function call?
我没有方便的编译器,但这渴望我的好奇心。如果我有这样的代码:
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; }
的内容,则将是第二个。函数调用具有更高的运算符优先级,因此将其称为函数,然后单位减去结果。
相关文章:
- 一元*运算符的操作数是否期望一个 prvalue
- 一元"运算符"未在C++中定义
- 应用于无符号类型的一元减号运算符
- C2675 一元运算符由错误的作用域引起
- 你能帮我了解重载一元运算符和二进制运算符之间的区别吗?
- 泛型lambda和一元+运算符
- 为什么'auto'不尊重一元减号运算符?
- 在C++中,一元减号运算符如何处理整数文本
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 为什么我不能定义一元运算符,然后在 MSVC 的模板类中声明具有相同名称的友元二进制运算符?
- C++一元右折与一元左折,带逗号运算符
- 为什么一元运算符和不需要完整类型?
- 在三元字符串中处理一元NOT运算符的调车场算法
- 相对于一元算术运算符+,C和C++之间存在差异的原因是什么
- 错误 一元减号运算符应用于无符号类型会导致无符号
- 一元减去运算符过载C++分段错误
- MSVS 2015 显式错误 C4146 - 应用于无符号类型的一元减号运算符
- 如何在C++中重载一元和二进制减号运算符
- 重载的"运算符+"必须是一元或二进制运算符错误
- 为什么一元后运算符在 C++ 和 Java 中的行为不同