3 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個贊
函數(shù)和運(yùn)算符之間的實(shí)際區(qū)別取決于編程語言。在普通 C 中,運(yùn)算符是語言本身的一部分。不能添加運(yùn)算符,也不能更改現(xiàn)有運(yùn)算符的行為。這不是 C++ 的情況,在 C++ 中,運(yùn)算符被解析為函數(shù)。
從完全不同的角度來看,考慮 Haskell,其中任何(二元)函數(shù)都可以被視為二元運(yùn)算符:
如果你不會說 Haskell,但知道點(diǎn)積,這個例子應(yīng)該仍然相當(dāng)簡單。鑒于:
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 開發(fā)人員只是強(qiáng)調(diào),在 C++ 中,將 new 視為具有自己語法的關(guān)鍵字,應(yīng)將 Go 中的 new 視為任何其他函數(shù)。

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

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