衡量一種語言(廣義,不只限編程語言)是否複雜,咱們能夠看其單詞數量、詞性變化以及語法結構。8數據庫
根據相關數據顯示,到目前最新的C++20爲止,C++的關鍵字大約是99個,還有6個特定上下文當中有特殊含義的名字。編程
做爲對比,C語言,截止到C11,關鍵字是44個windows
顯然,C++比C複雜,其關鍵字比C多一倍有餘。網絡
但也有觀點認爲,C++只有在被孤立看待的時候,纔會以爲複雜性。數據結構
設計任何一門語言都是有背景的。編程語言
C++面向的是這樣的特定用戶:函數
¤ 應對各類複雜問題工具
¤ 寫出運行至關長時間的解決方法性能
¤ 解決方案要知足任意的性能要求學習
¤ 工做在不一樣的硬件和操做系統上
¤ 和許多已存在的系統共存
雖然人們都但願有簡單的語言,可是人們真正須要的是有助於解決問題的語言。
因爲C++至關流行,所以獲得結論:
人們願意爲了語言所提供的強大表現力和高效率而放棄對簡單性的要求。
諸如C++中的初始化和賦值,在許多的語言中幾乎都沒有什麼區別,好比C。
那爲何在C++中卻如此重要呢?
C++容許變量「擁有」必定的資源,若是值改變,就必須放棄這些資源。
當咱們在編寫那些要處理分配在別處的數據結構的類時,差別就變得十分重要。
下面的代碼在給s賦值時,s其實早就已經有一個值了(默認構造函數)。
在賦值的時候,s必需要放棄舊值佔用的內存。
原則上,二者之間的界限沒有必要劃清。
能夠在初始化後緊跟一個析構操做,這樣會簡化不少程序,可是會使某些類的抽象變得難以實現。
好比:
有一些C++的庫會提供一種叫片的類,若是有某一個對象包括了某種數據結構,那咱們能夠建立一個指向該數據結構某部分的片,給這個片賦值,就會影響原數據結構中被選中的那部分。
但若是賦值總等價於緊跟初始化後的析構操做,那此類的抽象就比較難實現了。
還有好比界面設計,在C++中有不少都是給類設計提供一種簡化的工具,協助他們解決用戶界面的問題。
因此用C++設計類比用其餘語言會難更多。
但同時解決方案也更普遍。
這會給庫設計者提供更策略化的可能性,使得他們能考慮更多。
經過精心設計的C++庫會變得很是好用。
你們都會以爲,設計一個優秀的變長字符串和負數類十分困哪,但若是把這些東西補充到編譯器中,那將會是難上加難。
緣由是,用戶不多有權利和能力去修改本身的編譯器,把這種改變遷移到不一樣的編譯器上就更別提了。
基於此,C++提供了一個比較折中的方案。
它能容許咱們在無需改變編譯器內部的工做模式下,就能詳細地定義抽象概念的具體行爲。
計算機系統複雜且具備階段性,若是忽略了這種複雜性,不只不能消除複雜性,還要付出必定的代價。
例如計算3個浮點數相加的問題:
這段代碼並不能對1020、-1020、1的全部排列提供精準的答案。
1020+1和-1020將等於1020,1最終會被徹底丟掉。
在解決這個問題時,咱們能夠選擇處理掉或者忽略掉複雜性。
若是決定要處理,那麼就須要經過確保最精準的可能答案來完成這一點。
若是忽略複雜性,那麼複雜性就會轉移到其它地方。
處理複雜問題的軟件是確定要面對複雜性的。
部分語言僞裝複雜性不存在而選擇忽略它,給用戶提供了一個乾淨整潔的接口。
若是世界上有些地方不符合他們所設想的模型,就乾脆直接忽略掉。
還有一些語言則是把複雜性直接扔給用戶。(若是用戶可能無論行,就贏得了博弈,這就是爲何那麼多不完善的軟件產品在尚不完善時就交付了)。
在這裏,C++則是採用折中辦法,它容許咱們編寫對操做環境實施最底層控制的程序,也容許咱們忽略大部分不那麼重要的細節。
爲了能夠更加靈活,它付出的代價也更爲龐大。
靈活性對於庫類的設計者來講十分寶貴,他們所以能給用戶提供使用不一樣的抽象級普遍應用領域的功能。
所以,從長遠來看,抽象仍然是世界最有力的工具。
那對於小夥伴來講,你以爲C++是複雜仍是簡單,複雜的緣由是什麼呢?歡迎討論!
最後,無論你是轉行也好,初學也罷,進階也可,若是你想學編程~
——【值得關注】個人 C/C++編程學習交流俱樂部!——
涉及:C語言、C++、windows編程、網絡編程、QT圖形界面開發、Linux編程、遊戲編程、數據結構與算以及數據庫......