日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
開(kāi)發(fā)者應(yīng)該開(kāi)始學(xué)習(xí)C++嗎?

隨著C++ 11和C++ CX的引入,很多人重新燃起了對(duì)這門(mén)語(yǔ)言的興趣。不少開(kāi)發(fā)者,尤其是Windows開(kāi)發(fā)者,都想知道是否應(yīng)該放棄C#和Java,轉(zhuǎn)而支持C++。John Sonmez認(rèn)為這并不需要。

在“為什么C++并沒(méi)有‘王者歸來(lái)’(Why C++ Is Not ‘Back’)”一文中,John Sonmez認(rèn)為只有如下三個(gè)原因才會(huì)使用C++:

1.需要榨干軟件每一寸可能的性能,并且想用支持面向?qū)ο蟪橄蟮恼Z(yǔ)言來(lái)實(shí)現(xiàn)。

2.編寫(xiě)直接面對(duì)硬件的代碼。(例如,編寫(xiě)底層驅(qū)動(dòng)。)

3.內(nèi)存控制與定時(shí)極為重要,因而系統(tǒng)的行為必須是完全確定的,還必須能夠手動(dòng)管理內(nèi)存。(想一下控制機(jī)器移動(dòng)部件的嵌入式實(shí)時(shí)操作系統(tǒng)。)

Herb Sutter高度稱(chēng)贊了這篇文章,認(rèn)為文中的“觀點(diǎn)有些深度,沒(méi)有夸張”。關(guān)于C++的應(yīng)用場(chǎng)景,他又做了一些補(bǔ)充:

1.服務(wù),依賴(lài)于運(yùn)行時(shí)會(huì)更為困難。

2.測(cè)試,對(duì)比一下全部或者大部分采用靜態(tài)鏈接的應(yīng)用程序與在最終用戶(hù)機(jī)器上往往是***執(zhí)行時(shí)才編譯或即時(shí)編譯(JIT)的應(yīng)用程序,后者無(wú)法完整地測(cè)試。

John Sonmez反對(duì)學(xué)習(xí)C++,過(guò)于復(fù)雜是原因之一。即使C++ 11讓開(kāi)發(fā)容易了一些,但是程序員仍然不得不學(xué)習(xí)各種老式的C++編碼方法?!澳銜?huì)碰到20年前的C++代碼,看起來(lái)就像是完全不同的語(yǔ)言?!睘榱思訌?qiáng)其觀點(diǎn),他向準(zhǔn)備應(yīng)聘C++職位的開(kāi)發(fā)者提出了36個(gè)問(wèn)題。下面列出幾條:

1.在C++中,基本數(shù)據(jù)類(lèi)型有多少種初始化方式?你能都說(shuō)出來(lái)嗎?
12.什么是復(fù)制構(gòu)造函數(shù),何時(shí)會(huì)用到?尤其是與賦值操作符相比,你能區(qū)分嗎?
16.在C++中,何時(shí)適合通過(guò)引用來(lái)返回值,何時(shí)不適合?
33.為什么絕對(duì)不應(yīng)該在析構(gòu)函數(shù)中拋出異常?

反對(duì)C++的另一個(gè)理由是“編程語(yǔ)言真正需要的是簡(jiǎn)化并提高抽象層次,而不是反其道而行之”。他繼續(xù)道,

編寫(xiě)底層代碼的需求總是存在的,但我們今天編寫(xiě)的大部分都是較高層次的代碼。

很多年前,當(dāng)我終于無(wú)法再堅(jiān)持認(rèn)為我用C++開(kāi)發(fā)應(yīng)用的速度比C#快時(shí),我跳下了C++這條船。

我堅(jiān)持良久,試圖讓自己相信我在C++上的所有投入并沒(méi)有白費(fèi),但是事實(shí)證明, C#帶來(lái)的簡(jiǎn)化是如此之大,以至于與此相比,C++所提供的額外的力量并不值得這些額外的付出。

在文章結(jié)尾,John Sonmez說(shuō)到,學(xué)習(xí)C++對(duì)于理解計(jì)算機(jī)的一般工作原理仍然是有用的,“但是我認(rèn)為C++不會(huì)東山再起,這是好事”。

關(guān)于這一點(diǎn),Alo補(bǔ)充到:

我是從C++開(kāi)始的,而且我職業(yè)生涯的前四年都花在了C++上。這種經(jīng)驗(yàn)對(duì)我非常有價(jià)值,正如您的文章中所指出的那樣,因?yàn)橐坏┌袰++學(xué)到了足夠的水平,就可以很快地?fù)炱鹌渌魏握Z(yǔ)言;此外,還能從一個(gè)更低的層次上更深刻地理解軟件工作原理——如果從其他層次更高的語(yǔ)言開(kāi)始學(xué)習(xí)編程,獲得這種知識(shí)的難度就大多了。正因如此,我一直不贊成讓程序員從Java開(kāi)始學(xué)起。

Richard Dunks反駁到:

我認(rèn)為,在***學(xué)期的程序設(shè)計(jì)導(dǎo)論課程和數(shù)據(jù)結(jié)構(gòu)的教學(xué)中,C++是沒(méi)什么幫助的,因?yàn)楣鈱?shí)現(xiàn)就要耗費(fèi)很多時(shí)間,反而讓同學(xué)們忽略了他們要復(fù)現(xiàn)的結(jié)構(gòu)。我很高興自己能夠精通C++,但我認(rèn)為這并不值得,而且C++絕對(duì)不是一門(mén)***的教學(xué)語(yǔ)言。

Stephen Cleary有一條評(píng)論談到了可重用性:

我原來(lái)是C++開(kāi)發(fā)者,幾年之前,市場(chǎng)的壓力讓我成了一名C#開(kāi)發(fā)者。C#的確更有生產(chǎn)率,但是完全不可能實(shí)現(xiàn)C++模板那種級(jí)別的代碼復(fù)用。

經(jīng)典的例子就是容器、迭代器和算法這三駕馬車(chē)。在C++中,能夠創(chuàng)建一個(gè)用于任何容器的算法,而且可以在編譯時(shí)對(duì)算法加以調(diào)整以便必要的情況下利用隨機(jī)訪問(wèn)能力。你可以用C#試試。這還是尚未談到“新C++”的情況;1998年的C++對(duì)代碼復(fù)用的支持就比現(xiàn)在的C#好了。

關(guān)于性能,Herb Sutter給出了如下建議:

在任何語(yǔ)言中,如果非常關(guān)注性能,都會(huì)大量使用數(shù)組(未必“總是”使用,只是“大量”用到)。不過(guò)這在有些語(yǔ)言中很容易,可以很好地控制一般內(nèi)存布局,特別是控制數(shù)組;而在其他語(yǔ)言或環(huán)境中就困難一些(有可能讓你使用,但更為困難),如果這些語(yǔ)言或運(yùn)行時(shí)特別偏愛(ài)通過(guò)指針構(gòu)造的數(shù)據(jù)結(jié)構(gòu),你就不得不“放棄”或者“盡量避開(kāi)”。

除了在Herb Sutter和John Sonmez的相關(guān)博客上的大量高質(zhì)量評(píng)論,Reddit的Programming和Coding子群組也有很多可以學(xué)習(xí)的東西。

原文鏈接:http://www.oschina.net/news/36155/learning-cpp


網(wǎng)頁(yè)題目:開(kāi)發(fā)者應(yīng)該開(kāi)始學(xué)習(xí)C++嗎?
URL標(biāo)題:http://www.dlmjj.cn/article/coiiiog.html