猿问

运算符与函数行为

我正在阅读以下文件,

https://code.google.com/p/go-wiki/wiki/GoForCPPProgrammers

并发现下面的语句有点模棱两可:

与 C++ 不同,new 是一个函数,而不是一个运算符;new int 是一个语法错误。

在 C++ 中,我们将运算符实现为函数,例如+使用operator+.

那么一般而言,编程语言中运算符函数的确切区别是什么?


素胚勾勒不出你
浏览 204回答 3
3回答

慕虎7371278

函数和运算符之间的实际区别取决于编程语言。在普通 C 中,运算符是语言本身的一部分。不能添加运算符,也不能更改现有运算符的行为。这不是 C++ 的情况,在 C++ 中,运算符被解析为函数。从完全不同的角度来看,考虑 Haskell,其中任何(二元)函数都可以被视为二元运算符:如果你不会说 Haskell,但知道点积,这个例子应该仍然相当简单。鉴于:dotP :: (Double, Double) -> (Double, Double) -> Double dotP (x1, y1) (x2, y2) = x1 * x2 + y1 * y2两个都dotP (1,2) (3,4)和(1,2) `dotP` (3,4)会给 11。为了解决 Go 文档中的引用:Go 开发人员只是强调,在 C++ 中,将 new 视为具有自己语法的关键字,应将 Go 中的 new 视为任何其他函数。

繁华开满天机

“运算符和函数有什么区别?” 句法。但实际上,这纯粹是关于语言的约定:在 C++ 中,+是一个中缀运算符(并且只有运算符可以是中缀),并且func()将是一个函数。但即使这并不总是正确的:MyClass::operator+()是一个函数,但它可以,并且通常使用运算符语法调用。其他语言有不同的规则:在像 Lisp 这样的语言中,没有真正的区别。人们可以区分内置函数和用户定义的函数,但这种区分有点人为,因为您可以轻松扩展 lisp 以添加额外的内置函数。还有一些语言允许对用户定义的函数使用中缀符号。像 Python 这样的语言在它们之间lhs + rhs映射:映射到函数调用lhs.__add__( rhs )(所以“操作符”实际上只是语法糖)。我总结一下,一般来说,编程语言没有规则。只是两个不同的词,每种语言都可以随意使用它们,以最好地描述该语言。

天涯尽头无女友

那么一般而言,编程语言中运算符与函数的确切区别是什么?它是广泛的。在抽象语法树中,运算符是一元、二元或有时是三元节点 - 将表达式与特定优先级结合在一起,例如+优先级低于*,而优先级低于new。函数是一个更抽象的概念。作为原语,它们是类型化的子程序入口点,根据语言可以用作具有词法范围的右值。C++ 允许通过将运算符评估动态分配给所述方法来使用方法覆盖(重载)运算符。这是一种语言“特性”——正如这个问题的存在所暗示的那样——主要是混淆了人们并且在 Go 中不可用。
随时随地看视频慕课网APP

相关分类

Go
我要回答