偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

關(guān)于C++復(fù)雜性問(wèn)題解析

開(kāi)發(fā) 后端
決定C++中的復(fù)雜性,其根源在于三大約束:與C的完全兼容、靜態(tài)類(lèi)型檢查、最高性能,從而導(dǎo)致C++在編譯過(guò)程中大大增加了它的復(fù)雜性。

下面講述有關(guān)C++復(fù)雜性的問(wèn)題,實(shí)際上C++復(fù)雜性是一個(gè)距離應(yīng)用相當(dāng)遙遠(yuǎn)的非?;A(chǔ)的程序庫(kù),其主體部分只相當(dāng)于Java中System和Util兩個(gè)package,接下來(lái)進(jìn)行詳細(xì)說(shuō)明。

或有人說(shuō)C++之關(guān)鍵缺陷是沒(méi)有統(tǒng)一完整的類(lèi)庫(kù)支撐,Bjarne Stroustrup即強(qiáng)調(diào)此因素。然而這其實(shí)只不過(guò)是一個(gè)結(jié)果,而不是原因。正是因?yàn)檎Z(yǔ)言太復(fù)雜,才無(wú)法在有效期內(nèi)開(kāi)發(fā)出高質(zhì)量的大一統(tǒng)的類(lèi)庫(kù)。

C++復(fù)雜,并非是其體積龐大之必然結(jié)果。復(fù)雜是對(duì)結(jié)構(gòu)混亂無(wú)序程度的描述,規(guī)模大,結(jié)構(gòu)不見(jiàn)得必然復(fù)雜。C++的復(fù)雜,也并不是如很多人所認(rèn)為,是若干種編程范式(paradigms)的并存而至。事實(shí)上,現(xiàn)代實(shí)用編程語(yǔ)言至少有2-3種范式才能登大雅之堂。以范式數(shù)量論,Python和Ruby等新型動(dòng)態(tài)語(yǔ)言的范式甚至多于C++,然而它們卻以簡(jiǎn)單和開(kāi)發(fā)效率高著稱(chēng)。

C++復(fù)雜的根源在于三大約束:與C的完全兼容、靜態(tài)類(lèi)型檢查、最高性能。在三大約束下,C++未能完善對(duì)于面向?qū)ο笏枷氲闹С?,未能建立?qiáng)大的動(dòng)態(tài)能力,從而使得C++在OO這個(gè)單項(xiàng)上存在本質(zhì)缺陷。

事實(shí)上,C++的過(guò)程、OB模型相當(dāng)成熟和穩(wěn)定,而泛型模型,就單項(xiàng)來(lái)說(shuō),除了語(yǔ)法丑陋之外也沒(méi)有大的問(wèn)題。缺陷集中體現(xiàn)在OO模型的實(shí)現(xiàn),并因此干擾了其他幾個(gè)范式的完整程度。

然而,OO的缺陷絕非設(shè)計(jì)者的偏執(zhí),其原因在于三大約束。如果堅(jiān)持三大約束,則即使再重新設(shè)計(jì)一次,結(jié)果也與今日相差不遠(yuǎn)。Stroustrup在多種場(chǎng)合表示,對(duì)C++的設(shè)計(jì)沒(méi)有大的后悔之處,意思就是這個(gè)。侯捷先生早在2001年初即對(duì)我說(shuō),C++在OO上不及Java,當(dāng)時(shí)體會(huì)不深。

認(rèn)為沒(méi)有大一統(tǒng)的單根類(lèi)庫(kù)會(huì)使設(shè)計(jì)更加靈活,后來(lái)又認(rèn)為憑借GP可以抵消OO的不足甚至超越之,現(xiàn)在看來(lái)即使不是不可能,這條道路也必然是艱辛異常,成敗難以預(yù)料。又因?yàn)樯鲜鏊幸蛩氐木C合作用,C++基礎(chǔ)類(lèi)庫(kù)的建設(shè)只能進(jìn)行到很低的高度上就停下來(lái),因?yàn)樵偻献呔兔媾R重重困境和無(wú)窮無(wú)盡的爭(zhēng)論。

C++復(fù)雜性實(shí)際上是一個(gè)距離應(yīng)用相當(dāng)遙遠(yuǎn)的非?;A(chǔ)的程序庫(kù),其主體部分只相當(dāng)于Java中System和Util兩個(gè)package。而C++寧可停在這樣的低層次,也不愿意放棄三大約束中的任何一個(gè)。這種執(zhí)著使得高層標(biāo)準(zhǔn)庫(kù)設(shè)施的建立異常困難,使用也不容易。Boost庫(kù)中相當(dāng)部分組件的易用性不佳。

模板的復(fù)雜語(yǔ)法與三大約束也有直接的關(guān)系。另一個(gè)原因是Bjarne在發(fā)明模板時(shí)目標(biāo)單純。C#和Java加入泛型機(jī)制的時(shí)候。沒(méi)有繼承C++最好的經(jīng)驗(yàn),卻不約而同地繼承了C++模板機(jī)制中最壞的部分——語(yǔ)法,短期來(lái)看,喪失了一次改革的良機(jī)。長(zhǎng)遠(yuǎn)來(lái)看,必成累贅。

C++中的多種范式并行,是一些最復(fù)雜問(wèn)題的表面原因。以至于Doug Lea建議在一個(gè)項(xiàng)目里只堅(jiān)持一個(gè)范式。但是這仍然只是表象。歸根結(jié)底還是因?yàn)镺O的缺陷,使得與其它范式合作時(shí)困難成倍放大。故自接受Doug Lea思想以來(lái),我的C++(乃至其他現(xiàn)代語(yǔ)言,尤其是Python等多范式語(yǔ)言)的開(kāi)發(fā)設(shè)計(jì)思路是:

1. 首先選定一種思維方式(即范式),盡可能只用這一種思維方式解決問(wèn)題;

2. 如果在局部遇到其他思維方式更得力的問(wèn)題,則經(jīng)慎重考慮后,可以將另一種風(fēng)格包裝在局部,解決局部問(wèn)題。但整個(gè)系統(tǒng)在某一層次之上看來(lái),應(yīng)當(dāng)是統(tǒng)一一致的。一般對(duì)C++復(fù)雜性說(shuō)明,應(yīng)以O(shè)B為基本風(fēng)格。除非有類(lèi)似MFC那樣龐大而成熟的OO庫(kù)支持,不應(yīng)貿(mào)然在整體上使用OO風(fēng)格。

3. 多種風(fēng)格混用,除非有已被充分討論并驗(yàn)證的方案(即成熟模式),可提供單一風(fēng)格不能提供的較大優(yōu)勢(shì),否則應(yīng)極力避免。當(dāng)然鼓勵(lì)在研究中探索,但實(shí)踐是另一回事。

【編輯推薦】

  1. 簡(jiǎn)介學(xué)習(xí)C++總結(jié)之談
  2. 對(duì)C++庫(kù)函數(shù)進(jìn)行學(xué)習(xí)探索總結(jié)筆記
  3. C++類(lèi)庫(kù)設(shè)計(jì)的基本構(gòu)思與方法
  4. C++語(yǔ)言真的還有市場(chǎng)價(jià)值?
  5. C++類(lèi)庫(kù)設(shè)計(jì)的基本構(gòu)思與方法
責(zé)任編輯:chenqingxiang 來(lái)源: NET130
相關(guān)推薦

2010-01-27 15:50:23

C++復(fù)雜性

2010-01-13 18:49:54

C++的復(fù)雜性

2010-01-13 15:41:02

C++的復(fù)雜

2010-01-12 10:28:58

C++復(fù)雜性

2010-01-28 13:15:43

C++參數(shù)

2010-01-12 10:57:16

C++的復(fù)雜性

2024-08-19 00:10:00

C++內(nèi)存

2010-02-05 16:07:52

C++多態(tài)覆蓋

2010-01-21 14:07:14

CC++聲明

2025-05-08 03:20:00

2010-01-13 11:27:06

C++安全性

2020-01-08 21:38:30

機(jī)器學(xué)習(xí)工業(yè)4.0物聯(lián)網(wǎng)

2010-02-02 13:20:33

C++對(duì)象傳遞

2010-02-06 14:54:11

C++指針漂移

2017-06-23 08:45:02

存儲(chǔ)技術(shù)復(fù)雜性

2019-08-21 13:24:25

KubernetesHadoop容器

2009-08-20 15:54:48

從C#到C++

2010-01-21 10:23:53

C++代碼

2009-08-27 13:55:08

C#子線(xiàn)程

2010-01-28 15:45:35

C++老手
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)