程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 為什麼使用C++

為什麼使用C++

編輯:vc教程

問題

為什麼使用++?在你皺眉准備關掉這個網頁之前,試著回答這樣一個簡單的問題。

答案是效率,是嗎?每個人都知道答案。但是,我們應該以更專業的角度來討論一種編程語言或是與之相關的事情。那麼,讓我再問你一個問題:效率是否是人們選擇使用C++的唯一理由,為什麼他們不用C呢?C的效率公認比C++高(當然,我知道,現已證明在某種程度上說,C並不比C++高效,但請不要在此挑錯,因為即使他們是等效的,問題仍然存在)。

神話

我知道你可能會說,這是一種“擇優選擇”,因為畢竟C++就是設計成了C的優化,是C的擴充,可能它沒有想象中的那麼高效,但同時它卻有很多夢幻的高水平的特征。那麼問題就歸結為“開發者真的需要這些夢幻特征嗎?”我的意思是,畢竟我們都聽說過KISS(Keep It Simple,Stupid!保持簡單)和stuff(材料),我們也都聽過這種說法——與C++相比,C更KISS,所以我們應該選擇C。這樣無休止的爭論使得C和C++之間的比較變成了一個神話(或者是一片混亂)。令人驚訝的是,似乎很多人傾向於C,而理由是C++太難正確使用了。甚至是Linus也這麼想。

這種現象產生的真正嚴重的影響是,驅使更多的人在C與C++之間權衡利弊的時候,他們選擇了C;一旦他們開始使用C,他們很快就會感到滿足和舒服,就是所說的“令人滿意”的體驗。這樣,當爭論產生的時候,他們就會站出來說與C++相比,C是更好的選擇。而實際上,他們都沒有真正試著使用過C++,或者他們根本不是足夠好的C++程序員。而真實的答案,往往開始與“它取決於”。

那麼,我說過“它取決於”,取決於什麼?顯然,在一些領域選擇C比C++更好。例如,設備驅動程序的開發通常就不需要OOP/GP(面向對象程序設計/概念編程)技術。它只需要簡單的數據操作;最重要的是,程序員能正確的知道系統如何工作,以及他們該做什麼工作。再考慮OS(操作系統)的開發,我自己從來沒有參與過任何OS的開發,但是讀過大量OS代碼(大部分是Unix),我感覺很多OS重要部分的開發也都不需要OOP/GP技術。

但是,這就意味著,在所有強調效率的領域,C都比C++好嗎?實際上不是。

答案

讓我們具體問題具體分析

首先,當人們關心效率的時候,實際上就關心兩類效率——時間效率(例如:OS,運行時間,實時軟件,高要求系統)和空間效率(例如:所有嵌入式系統)。但是,這種分類並不能真正幫我們決定應該選擇C還是C++,因為C和C++在時間和空間上都是非常高效的。真正影響我們選擇哪種語言(當然是在C和C++之間)的是商業邏輯(這裡的“商業”並不是指“企業應用商業”)。例如,是不是使用OOP/GP來表達邏輯更好,或者是不是除了考慮數據和程序還應該考慮保持軟件美觀。

從這點上來說,我們可以模糊地把應用分為兩類(當然前提是我們只關心C/C++,不關心java/C#/ruby/erlang等):低水平應用和高水平應用。低水平應用的意思就是,在這裡並不需要那些夢幻抽象如OB(基於對象)/OOP和GP;高水平的意思當然就是需要了。顯然,在所有需要C/C++的領域(由於它們的高效性)裡,有大量“高水平”應用(參看在Bjarne Stroustrup主頁上列出的),在這些領域,C++就會更有用。

不過,換個角度想想,即使在這些領域,程序員在他們的代碼中不使用那些高水平的抽象,還是有他們應該使用C++的理由。為什麼呢?因為你的代碼不使用類和模板並不意味著不使用類庫。考慮所有便捷的C++類庫工具(即將有校准擴展tr1/tr2)的實用性,我認為在這些情況下,有非常充分的理由選擇C++——編碼的時候你可以仍然使用C的形式(以任何你想要的方式來保持KISS)。同時,你還可以使用強大的C++類庫(例如,STL標准模板庫,tr1/tr2組件等)。最終,就會發現這件可能會被很多人忽略的事情——有時KISS依靠抽象。我想,Matthew Wilson在他的新書“Extended STL,Vol1”的序言中,極其透徹地闡明了這個觀點。書中提到了兩段代碼,分別用C和C++編寫:

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved