亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

運算符與函數行為

運算符與函數行為

Go
素胚勾勒不出你 2021-06-13 09:21:58
我正在閱讀以下文件,https://code.google.com/p/go-wiki/wiki/GoForCPPProgrammers并發現下面的語句有點模棱兩可:與 C++ 不同,new 是一個函數,而不是一個運算符;new int 是一個語法錯誤。在 C++ 中,我們將運算符實現為函數,例如+使用operator+.那么一般而言,編程語言中運算符與函數的確切區別是什么?
查看完整描述

3 回答

?
慕虎7371278

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 視為任何其他函數。


查看完整回答
反對 回復 2021-06-21
?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

“運算符和函數有什么區別?” 句法。但實際上,這純粹是關于語言的約定:在 C++ 中,+是一個中綴運算符(并且只有運算符可以是中綴),并且func()將是一個函數。但即使這并不總是正確的:MyClass::operator+()是一個函數,但它可以,并且通常使用運算符語法調用。

其他語言有不同的規則:在像 Lisp 這樣的語言中,沒有真正的區別。人們可以區分內置函數和用戶定義的函數,但這種區分有點人為,因為您可以輕松擴展 lisp 以添加額外的內置函數。還有一些語言允許對用戶定義的函數使用中綴符號。像 Python 這樣的語言在它們之間lhs + rhs映射:映射到函數調用lhs.__add__( rhs )(所以“操作符”實際上只是語法糖)。

我總結一下,一般來說,編程語言沒有規則。只是兩個不同的詞,每種語言都可以隨意使用它們,以最好地描述該語言。


查看完整回答
反對 回復 2021-06-21
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

那么一般而言,編程語言中運算符與函數的確切區別是什么?

它是廣泛的。在抽象語法樹中,運算符是一元、二元或有時是三元節點 - 將表達式與特定優先級結合在一起,例如+優先級低于*,而優先級低于new。

函數是一個更抽象的概念。作為原語,它們是類型化的子程序入口點,根據語言可以用作具有詞法范圍的右值。

C++ 允許通過將運算符評估動態分配給所述方法來使用方法覆蓋(重載)運算符。這是一種語言“特性”——正如這個問題的存在所暗示的那樣——主要是混淆了人們并且在 Go 中不可用。


查看完整回答
反對 回復 2021-06-21
  • 3 回答
  • 0 關注
  • 237 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號