C 複雜的必要性是為什麼?為什麼說C 太複雜?

2021-10-24 16:36:13 字數 1865 閱讀 6833

可以輕易的找出許多文獻說明c++太複雜了,例如學習c++的書籍的厚度。

這樣以至於c++的設計者bjarne都曾懷疑具有類的c是不是已經太龐大了。

因為,總有大量對語言的新特性的要求:

但是c++只在被孤立看待的時候,才會覺得複雜性。設計任何一門語言都是有背景的。

c++面向的是這樣的特定使用者:

雖然人們都希望有簡單的語言,但是人們真正需要的是有助於解決問題的語言。

由於c++相當流行,因此得到結論,人們願意為了語言所提供的強大表現力和高效率而放棄對簡單性的要求。

例如c++中的賦值和初始化,在很多語言中都沒有區別,比如c。

為什麼在c++中卻如此重要呢?

c++允許變數「擁有」一定的資源,如果值改變,就必須放棄這些資源。

當我們在編寫那些要處理分配在別處的資料結構的類時,差異就很重要。

class string
string s = "jiangxuehan";
下面的**給s賦值時,s早就已經有乙個值了(預設建構函式)。在賦值時,s必須要放棄舊值占用的記憶體。

string s;

s = "jiangxuehan"

原則上我們沒有必要劃清兩者的界限,可以在初始化後緊跟乙個析構操作,這樣會簡化很多程式,但是會使某些類的抽象變得難以實現。

例如有些c++的庫提供了一種叫的類,如果某個物件包括了某種資料結構,通常我們可以建立乙個指向該資料結構的某部分的片,給這個片賦值會影響原資料結構中的被選中的那部分。

string s = "the dog";

s(4,3) = "cat";//s(m,n)表示從字元m開始的n個字元長的s的一片

//s的值為"the cat"

s(4,0) = "big, fluffy"

//s的值為the big, fluffy cat

如果賦值總是等價於緊跟初始化後的析構操作,那麼此類的抽象就比較難實現。

再有比如介面設計,c++中有很多都是給類設計提供簡化的工具,幫助他們解決使用者介面的問題。因此用c++設計模擬用其他語言難得多,但是解決方案更廣泛,給庫設計者提供了更策略化的可能性,使他們能考慮的更多。精心設計的c++庫會非常好用。

因此c++提供了乙個折中的方案,它允許我們在無需改變編譯器內部的工作模式,就能詳細地定義抽象概念的具體行為。

計算機系統複雜而有階段性,如果忽略這種複雜性,並不能消除複雜性,而且通常要付出代價。

例如計算3個浮點數相加的問題:

double add(double x, double y, double z)
這段**並不能對1020、-1020、1的所有排列提供精準的答案。1020+1和-1020將等於1020,1最終會被完全丟掉。

解決這個問題時,我們可以處理或者忽略複雜性,如果決定處理,就要通過確保最精確的可能答案來完成這一點,如果忽略複雜性,那麼複雜性會轉移到使用者的說中。

處理複雜問題的軟體肯定要面對複雜性。有些語言假裝複雜性不存在而忽略它,提供給使用者乙個乾淨整潔的介面,如果世界上有些地方不符合他們所設想的模型,就乾脆忽略而不見,忽略掉。還有些語言則是將複雜性扔給使用者(如果使用者可能不管行,就贏得了博弈,這就是為什麼那麼多不完善的軟體產品在尚不完善時就交付了)。

c++採用的則是折中辦法,它允許我們編寫對操作環境實施最底層控制的程式,但也允許我們忽略大多數不重要的細節。為了更加靈活,它付出的代價更為龐大。(這就是生活 )

靈活性對類庫的設計者來說尤其寶貴,他們因此能給使用者提供使用不同的抽象級的廣泛應用領域的功能。長遠看,抽象仍然是世界的最有力的工具。

Spring IOC為什麼是必要的

情景假設 1.假如甲生產筆,乙生產筆帽,要想生產乙隻完整的筆,甲肯定需要筆帽啊。於是甲便派乙個人去甲那裡取筆帽,但是不知道什麼原因乙搬家了,那甲這次是不是就要失敗而歸了。第一次搬家,第二次搬家 2.於是甲很煩啊,每次去乙住的地方,乙都換位置了。於是協商了一下,你以後把生產的筆帽給我放到a城哪個倉庫,...

為什麼說AI是未來

人們都說希望至美,為什麼希望至美,因為希望往往能帶給人快樂 富有。如果未來就如希望一般該有多好。在2017年5年alphago以3 0擊敗圍棋世界冠軍柯潔時,人工智慧技術瞬間點燃了人們的熱情,對人工智慧技術的想象空間被開啟。以其深度學習演算法為基礎的各個應用場景逐個落地。第一波網際網路智慧型化是基於...

為什麼說BERT是bidirectional

bert是乙個deep bidirectional transformer。transformer可參考 非常詳細易懂 transformer是乙個encoder decoder框架。編碼器的結構 其中,自注意力層在編碼某個詞的時候就會考慮這個詞所在句子的所有詞,所以在編碼的時候,self atte...