C++ 為什麼沒有 function 關鍵字?
因為當初妄圖做到這樣:不通過function關鍵字就確定是不是函數。
然而當初的C語言比較簡單,的確可以做到。現在的C++依然需要兼容C的語法,但是引入了很多新語法之後,這個設計造成了很多坑,經常會混淆函數定義與轉型表達式、函數調用等等。
Python
def functionA():
我:編譯器,我告訴你,這個functionA是一個函數,懂了嗎?
編譯器:懂,了解。
--------------------------------------------------------------------------------------------
C
Type functionA(void);
我:編譯器,我不說,你知道它是什麼吧?
編譯器:返回類型、函數名、圓括弧、傳入參數,啊~~~函數聲明啊,懂懂懂。
--------------------------------------------------------------------------------------------
C++
Type functionA();
我:編譯器,我不說,你知道它是什麼吧?
編譯器:喵喵喵?
我:這是一個函數聲明,懂不懂?
編譯器A:你的Type是一個類,你這句「話」放在主函數里是什麼意思?是函數聲明還是調用構造函數?
編譯器B:????????????老子看不懂,你這寫的是什麼?垃圾程序員。
C++不需要function關鍵字就能確定一個東西是不是函數
關鍵是為什麼需要一個function關鍵字?
因為不需要
因為不需要。
那為什麼不作為提示用呢?
因為 C++ 師承 C 。
在 C 誕生那個年代鍵盤不發達,程序員為了少打幾個字元喪心病狂,以致 C 有「一行聲明能聲明不同類型的對象/函數」這種奇葩設定。而且 C 誕生之初就有函數(直接從 B 繼承的)。
如果說一部分像是數學的函數的東西(無副效應、同樣輸入得到同樣輸出)的話,可以將一部分 constexpr 看成 function ,不過對應得並不好。(且 cmath 裡頭的函數都不是 constexpr ,簡直……)
如果說像是 Pascal 的 function 的東西的話,auto 可以提供有點像的語法:
constexpr auto is_prime(std::int64_t n) -&> bool
vs
function IsPrime(n : Int64) : Boolean;
(僅作說明, Pascal 的常表達式無法擴展到自定義函數,只能是運算符和某些內建函數的組合)
大概就這些有點像…
沒必要有function關鍵字吧,C++里可以看出來什麼是函數,什麼是變數初始化,前提是能分得清int a和int a()的區別。(曾經掉進坑裡過,後來明明白白我的心)
一切為了令人討厭的c兼容性。
講道理c++如果有function關鍵字絕對會對編譯器前端後端都有莫大的好處。但是一切為了令人討厭的兼容你可以把聲明函數的auto當作function。
完全不需要啊
c 又不是函數式編程語言
一定需要function關鍵字的話出門左轉JavaScript
歷史原因吧,實際上 void function()自己定義一個函數學習std::function這樣自己實現就行了,畢竟萬能工具箱,可以玩轉很多黑魔法
因為當初c設計時就是要用盡量少的關鍵字(實際上c只有32個關鍵字),因為c初衷就是代替大部分彙編的,x86彙編關鍵字加上參數上千個。再說,在c c++里根本不用function就知道是函數,因為有()!
推薦閱讀:
※如何用通俗易懂的語言解釋虛擬存儲器?
※計算機語言算不算語言?
※國人對於國外CS教材是否存在盲目崇拜心理?
※Node.js是用來做什麼的?
※前端的表單驗證還有必要嗎?