C++能勝任C的所有工作嗎?不行,有哪些?


不能,從 ANSI C++98 / ANSI C99 標準分開制定開始,C++ 就已經不再是 C 的超集。經過了十多年的洗禮,現在 C++ 跟 C 已經成為兩種完全不同的語言。

以上只是從語言的角度來說的,可以寫出無法輕易用 C++ 實現的 C 程序,或者可以輕易寫出無法被 C++ 編譯器編譯的合法 C 程序。反之亦然。當然這裡指的是等價轉換,如果你說你換個方式重寫代碼常常也是可以的。

從另外一個問題,也就是所謂 ABI 問題上來說,C++ 也無法勝任。這個問題通俗的來說:C 語言的庫以及符號表格式是有明確定義的,即便動態鏈接動態載入也沒有問題。而 C++ 的 ABI 是依賴於具體實現的,不同的 C++ 編譯器即便在同一平台下都允許有不同的 ABI,編譯出的庫不能通用。——在某些場合,這將完全阻礙 C++ 的使用。具體問題有興趣的同學可以去專門研究。


從理論上講,是完全可以的

C能做的事情,C++也都能做

然而,何必要用C++來作C擅長的事情呢?

反過來,何必要用C來做C++擅長的事情呢?

各種語言都有它們自己的特色,讓他們各自發揮自己的長處,各司其職好了


用戶態應用程序沒問題,通用操作系統內核還沒有成功先例。


對於需要明確的結果的環境,C++的異常機制可能會造成問題的不可追溯——一個被拋出的異常不知經過了多少層才被捕捉到

對於需要效率的環境,C++的實現會造成效率的下降——構造、拷貝等函數不合時宜的自作聰明造成了系統資源無謂的浪費

上面兩點也說明了為什麼操作系統都是C實現

需要減小體積的環境,對環境的依賴會加大——可以想像只有幾十兆ram的嵌入式設備上還要再堆上一堆運行時庫是多痛苦的事情么


雖然不懂C++,但是覺得上面的好多似乎有點混淆,把C++當C用或者在C++裡面寫C跟C++本身能否實現C做得事情完全是兩碼事


C++可以認為是C的超集,但是多出來的幾乎都是成事不足敗事有餘的功能。


能。


c語言,方便直接管理內存等相對底層的資源,對特定應用,實現效率很高 。

c++, 是面向對象的思想。因此,可以只關注業務相關邏輯 ,而不用太關注很實現細節具體的細節。

對業務響應能力比較高。

如果業務比較複雜,就用c++;如果業務邏輯比較簡單,或偏向底層,對性能要求高,就用c

其實c/c++哪個更好? 爭論了很長時間

c/c++,在某些條件下,只有是不是適用,無所謂絕對的哪個更好


有些地方不需要C++ 多出來的特性,有些地方為了避免制定C++ 規範的麻煩。於是乾脆就直接用 C 了。

請數學家幫忙寫數學作業,能勝任么?能,只不過你請不起。就算請來了人家給你每道題都能花N天時間探討各種可能性發幾篇論文出來。

(以上道理說明純屬YY。比喻也牽強附會。認真你就輸了。)


如果從C++是C超集的層面考慮.

用C++中pure C的部分應該是沒問題的. (不過這樣的話,還不如直接用C... )

如果拿pure C之外的部分, 我贊同陳碩前輩的回答.


C++由於比較專註與類的思想,所以對於結構化不夠清晰,與C語言側重點不同,同時,由於大量使用了構造函數與析構函數,導致其效率比純C的效率要低很多,特別是在io上,可以明顯看出差距。C的puts是最快的,然後是scanf/printf,最後才是cin/cout。所以在底層驅動上,還是以C或者彙編比較適宜。


不行吧,要不然為什麼linus這麼不待見c++!


推薦閱讀:

c++delete一個指針,沒有賦值為null,再創建同類型的指針,有沒有可能被釋放資源的內存地址被重新使用,賦值給新指針?如何用程序驗證這種可能性?這個class里有成員是引用,引用所指的內存也會被釋放嗎?
如何評價C++17中的新特性fold expression?
C++有右值引用以後是否可以直接return 字元串、結構體而無需考慮大量數據複製的性能問題了?
C++ 研發實習生面試通常會被問到什麼問題?
怎麼返回容器中部分內容的引用?

TAG:編程語言 | C編程語言 | C | CC |