簡體   English   中英

C / C ++中的運算符與函數

[英]Operators vs Functions in C/C++

最近有人問我C ++標准運算符(例如new,delete,sizeof)和函數(例如tan,free,malloc)之間的區別。 “標准”是指編譯器套件默認提供的,而不是用戶定義的 以下是我給出的答案,但似乎都不令人滿意。

(1)運營商不需要包含任何標頭來使用它:例如,您可以撥打新電話而不包括任何標題。 但是,函數(比如free())確實需要包含頭文件,強制執行。

(2)運算符在標准頭中的某處定義為(即類操作符)。 功能不是。

你能批評這些答案並讓我更好地了解它們之間的區別嗎?

運算符是具有固定語法的關鍵字 可以重載的那些可能在語法上有所不同,但這是在邊界內。 即使在重載時, new運算符仍然是new拼寫,並且調用它的語法總是相同的。

函數名稱是標識符 ,幾乎可以是任意的。 沒有語法上的理由你無法取消malloc()和使用

bool my_fancy_alloc(void*& memory, unsigned char size, bool zero_it);

代替。 (馬克: 還有其他原因,但就像你的同工的理智。)

(1)並非嚴格屬實。 typeid是一個運算符,但它的使用要求你包含<typeinfo>

我的答案只是運營商被定義為這樣。 ::並不一定需要被視為運營商,但標准表明它是,所以它是。

如果你正在尋找一個更詳細的答案,我會繼續提到運營商大多看起來不像功能。 那些做[ sizeoftypeid ]的人不能充當職能; 它們的操作數不會在運行時進行評估。

編譯器將運算符編譯為一系列指令。

當代碼調用一個函數時 ,它必須跳轉到一段單獨的代碼

運算符具有特殊語法,例如,您可以使用new (或+ )而不在運算符名稱后面的括號中放置參數。

操作員和功能在概念上是相同的。 它們都將一些值作為輸入並返回一些作為輸出。 他們唯一的區別就是語法。

我的理解函數名稱是goto運算符的表示,在跳轉到特定代碼位置后,應用程序可以執行一個到多個工作單元,另一方面操作員執行實際的工作單元。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM