3 回答

TA貢獻1802條經驗 獲得超4個贊
函數和運算符之間的實際區別取決于編程語言。在普通 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 視為任何其他函數。

TA貢獻1816條經驗 獲得超4個贊
“運算符和函數有什么區別?” 句法。但實際上,這純粹是關于語言的約定:在 C++ 中,+
是一個中綴運算符(并且只有運算符可以是中綴),并且func()
將是一個函數。但即使這并不總是正確的:MyClass::operator+()
是一個函數,但它可以,并且通常使用運算符語法調用。
其他語言有不同的規則:在像 Lisp 這樣的語言中,沒有真正的區別。人們可以區分內置函數和用戶定義的函數,但這種區分有點人為,因為您可以輕松擴展 lisp 以添加額外的內置函數。還有一些語言允許對用戶定義的函數使用中綴符號。像 Python 這樣的語言在它們之間lhs
+ rhs
映射:映射到函數調用lhs.__add__( rhs )
(所以“操作符”實際上只是語法糖)。
我總結一下,一般來說,編程語言沒有規則。只是兩個不同的詞,每種語言都可以隨意使用它們,以最好地描述該語言。

TA貢獻1831條經驗 獲得超9個贊
那么一般而言,編程語言中運算符與函數的確切區別是什么?
它是廣泛的。在抽象語法樹中,運算符是一元、二元或有時是三元節點 - 將表達式與特定優先級結合在一起,例如+
優先級低于*
,而優先級低于new
。
函數是一個更抽象的概念。作為原語,它們是類型化的子程序入口點,根據語言可以用作具有詞法范圍的右值。
C++ 允許通過將運算符評估動態分配給所述方法來使用方法覆蓋(重載)運算符。這是一種語言“特性”——正如這個問題的存在所暗示的那樣——主要是混淆了人們并且在 Go 中不可用。
- 3 回答
- 0 關注
- 237 瀏覽
添加回答
舉報