為什麼說C 很難?

時間 2021-05-07 06:16:43

1樓:Cc小菜雞

我只是個初學者,站在初學者的角度,用c我可以有清晰的思路模擬程式整個的執行以及各部分的執行,是人掌控程式的感覺。而c++比起c很多地方實現和操作起來可能更加方便,但是我完全體會不到這種掌控感,甚至還要被繁瑣的「規定」所掌控

2樓:清予

個人認為,c++既要兼顧底層又要搞高階那套,有些四不像,然後又讓開發特別的靈活,這個靈活更讓這個語言變得很困難。比如說記憶體管理,對於c來說,申請記憶體malloc,釋放的時候free,只要別忘記了就好,而c++,引入了物件導向思想,有了類,多出了繼承、多型,記憶體申請後什麼時候釋放就有好多種情況。

3樓:伴讀小書童

國慶節回家,開手動擋的車,你沒猜錯,我想到了C++不同的檔位是不同類,不同的速度需要使用對應的類,而且切換的時候要先踩離合,使當前類失效,這,離合不就是delete嗎!

如果你delete的時機沒用掌握好,那就等著熄火吧。

雖然堵車的時候很難受,但其實特別鍛鍊臂力十幾個小時開下來,我覺得我已經爐火純青了,但,不說了,前面又堵車了

C++之難,難在離合器

4樓:gashbell

古時候的一些庫,號稱是C++庫,卻暴露了大量的純C介面。使用C++呼叫那些庫就非常難用。

windows上的COM、OLE算是一例。COM的物件都實現了侵入式的引用計數器。但是COM的介面都是C介面,每次我通過裸指標拿到乙個COM物件以後,我都想,我要不要給這個指標呼叫AddRef()?

每次我要把乙個COM物件傳給乙個API的時候,我都拿不準我要不要先調個AddRef(),還是這個API內部自己會調。

COM、OLE這些東西不可能有人通過純C來使用的啦,為什麼還要暴露純C介面。微軟後面出了ATL,裡面實現了智慧型指標CComQIPtr,但是也沒有把已有介面都改成RAII版本,還是要使用裸指標。

5樓:Zzcode

C++毫無疑問很難,但他難在工程上。簡而言之就是他的工具以及特性太多了,五花八門的,或者說條條大路通羅馬。

很多人覺得用C++≡造輪子,這是錯誤的想法,實際上C++有很多庫可用,有很多人已經做好了輪子。

但是毫無疑問的,終有一天你要自己造輪子,這個時你自己就明白了C++有多麼強大,有多麼複雜了。

6樓:Hawaii

你:我要造車

Python:給你發動機、變速器、車架、懸掛、輪胎和一本15頁的組裝說明

C:給你鋼材,還有車床

C++:給你鋼材,還有CAD軟體,三座標掃瞄器,數控高精度車床,全自動機械臂,電泳裝置,焊接機械人,四輪定位試驗台,附帶10000頁的使用手冊

7樓:

大三,非計算機專業

先說結論,C++確實很難

C++從98,03,11,14,17到現在的20,這些特性是處於不斷的變化,有新加入的特性,有棄用的特性。另外,特性和特性之間還存在很多依賴問題,需要你會打連招。我是前幾年學C++的,開始很模糊,現在還是很模糊,很多概念有時候還是得看看文件。

我現在學C++的方法是,需要什麼學什麼,不需要什麼就暫時不學。輪子能用現成的就用現成的,實在是輪子不能跑就再考慮造個簡陋的,不要想著搞個什麼大新聞造個很完美的輪子。先把輪子造個輪廓,再往上加些裝飾品。

真正用C++開始做東西的時候,進度是非常緩慢,有時候十來天沒有進度很正常。要耐得住寂寞,當你乙個人看著乙份開源文件,還沒寫完的,全英文的,並且還沒有你實際想要的樣例。你想知道怎麼用這個輪子?

自己看原始碼去,看函式介面咋搞的。經過很長一段掉頭髮的過程,最後你會欣喜於你的專案進度增長了0.01%

8樓:

最難的不是c嗎幾乎沒包可用,還要小心翼翼折騰記憶體分配乙個不小心就咖哩給給,docker下debug還用gdb,真是搞死。這學期閒的操蛋選了os前兩個作業純c我寫吐了,後面兩個作業果斷換了c艹。

9樓:Ninsun

C++的難度其實在於標準庫。

簡單來說其實是標準庫不夠用。

拋開標準庫,用別的庫做這些庫擅長的事情,比如Qt,你就會發現C++還是很簡單的。

10樓:

你得承認的乙個事實是大多數人都會說C++難,一種程式語言被貼上「難」的標籤,往往是因為這個語言本身有問題,而不是使用者的問題。C++一開始並不難,後來的難主要是因為它被賦予了過多的內容,內建了其他兩到三種程式語言的功能,且還在不停發展。之所以這樣,圍繞創造它的人和團隊難疚其責,也就是Bjarne Stroustrup和C++標準委員會。

耳根子軟,什麼東西都往裡灌,野心還太大,大到失去控制,大到C++一天天的複雜,變成乙個任何人都無法降服的草雞怪獸。當然,你可以自己裁剪這個語言,實際上大多數團隊用C++時都會裁剪這個語言,但是也不容易,因為難以統一形成乙個一致的社群,每個人各自為戰,最後就是整個社群一盤散沙。所以,C++日漸衰落是肉眼可見的。

C++的「難」正是這種程式語言的致命缺陷。

11樓:

真正學好C++,除了語法外,要了解計算機原理,作業系統原理,編譯原理等。

另外C++作為非動態的物件導向的語言,你要清楚地知道它的各種限制,以及理解由此而來的各種奇技淫巧。在此之上,你才能戴著鐐銬跳舞。

然後就是一些通用的思想了,比如物件導向,泛型等等。

12樓:

覺得簡單的是因為把c++當其他語言寫。

不用模版,什麼模版推導,引用摺疊坑都沒了

不用裸指標,什麼多型情況下析構,深淺拷貝坑沒了,char陣列坑沒了都用string,列印字元就是iostream

調包俠從來自己不構造類,什麼複製,移動那些函式坑沒了,虛函式,多繼承的坑沒了。

更不要說無鎖程式設計,元程式設計的奇淫技巧,聽都沒聽說過,引數包到std::range根本不了解,c++版本區別根本不關心……

用c++寫出了其他語言的感覺,確實沒啥難的……

13樓:

個人覺得是這個語言不好,有些地方標準解釋不清就ub。

比如物件被move之後,應該是什麼樣的?還可不可用?

如果可用,誰來保證可用?如果不可用,編譯器會給警告麼?就知道ub,u他媽b的。

14樓:深度量化

相對而言的。

c++既有高階語言的功能,也能直接以彙編進行編寫,非常的靈活。也正是這種高度靈活,使得其複雜度特別高。比如要掌握彙編,你得了解各種系統底層的資訊,得了解編譯原理,要掌握模板,得理解物件導向原理,函式指標,虛表等等。

所以,c++用得越久越多,越感覺其博大精深與複雜。

15樓:

C++百分之80到90的特性對我從事的應用一點用沒有。畢竟我們行業十幾年前還是彙編和C混編,現在也不過是C和C++混編的程度。而且幾乎所有的Boss都認為搞軟體只是我們行業裡灰常小的一部分業務。

所以我們行業會C++的很多,精通的幾乎沒有。

16樓:ppppppkun

個人感覺因為包羅永珍所以有點難,不過也沒覺得非常非常難,應該是因為自己還沒接觸到讓人頭大的地

不過再難我也相信:

無他,但手熟爾

17樓:Xi Yang

C++的困難性,主要有這幾個問題:

總有人說「雖然C++功能/正規化多,但是你可以只會、只用其中一部分」。這是不太現實的,因為你開發不可能不用第三方庫,然後你不可能限制人家用C++的那個部分。如果那個部分你不熟悉,編譯器噴出個一百行的模板錯誤你看不懂怎麼辦?

C++語言本身的範疇,甚至沒有包含寫出乙個能跑的程式。因為語言本身只到編譯單元,後面還有鏈結什麼的玩意,而理論上來講那些東西都是各個目標平台自己的,並不是語言的一部分。

C++沒有「官方」的編譯控制器、包管理器,逼迫新手去乙個個屎坑里自己踩一遍。特別是當你需要跨平台開發而不能簡單地全靠VS/XCode的時候。

由於C++實際上用來開發有一定複雜性的高效能系統(沒有這些需求,不必用C++),所以通常不可避免地要接觸語言以外的大量東西,比如記憶體對齊、SIMD優化、編譯器特異的intrinsics、系統API等等,這在廣度上增加了學習內容。

18樓:KuriyamaMirai

您都這麼說了,說明對於您而言沒有什麼語言是難的,而我們指的是C++相對於其他高階語言很難

不說了,打孔機又壞了,IBM卡也不夠了

19樓:火柴棍

Bjarne Stroustrup——C++之父——曾經說過:即使是我特麼也不敢說完全搞懂了C++。

好多年前說的,估計現在掌握得差不多了。

20樓:「已登出」

從競賽角度,肯定是用不到大部的c++內容的。

演算法競賽,正常情況最多就是運用下過載運算子,迭代器,用類封裝下資料結構,STL云云。

因為演算法競賽側重點是考察對資料結構與演算法理解和靈活運用,還有一些數學知識。

不然為什麼大多數比賽能用多種語言提交?側重點不在語言本身。

建議至少先閱讀並掌握《c++ prime plus》。

21樓:kanmars

嗯,難在它具有其他語言的所有特性,還具有其他語言所不具有的特性

或許很多人不理解,但事實是:凡是你在其他語言裡能找到的東西,在C++裡都有。

其複雜性就體現在這種不加選擇的廣大之中

22樓:MemoryLeak

穩定大型的C++十分複雜,其不僅設計到基礎的計算機知識,更是涉及很多領域知識,c++既可以作為應用程式的開發語言,也可以作為許多基礎庫或直譯器的基礎語言,其複雜性在於出於不同的目的你可能要選擇一部分最適合的特性,並且為了照顧團隊的總體開發水平和將來的維護性而捨棄一些特性,而做這些的前提又是你對許多特性要十分了解,c++最難的是取捨,而取捨的關鍵又在於精通,什麼都能和什麼都不能往往是對立統一的。

23樓:石大頭

比如說要新增乙個特性,

別的語言: 直接把這個特性做進編譯器

c++: 如果用庫實現這個特性,需要引進哪些語言機制?好的我們就在編譯器裡加這些語言機制,剩下的交給庫作者

24樓:CodeArhat

您在開發C++程式呀?

哪個系統啊?Win、Linux……

誰家編譯器啊?VC、GCC、MinGW、clang++……啥語言版本啊?98、03、11、14、17、20……目標平台呢?

x86、x64、arm64、cross……目標檔案咧?exe、lib、dll、c、asm……開優化/分析不?Debug、Release、O123、-g、-pg……

函式呼叫方式?cdecl、stdcall、fastcall……資料儲存方式?auto、static、const、constexpr、extern、mutable、volatile、register、thread_local……

要執行緒不?ML/MT/MD……

異常模型用的啥?SJLJ、SEH、DW2……字符集涅?MBCS、Unicode……

char帶符號不?

wchar_t是2位元組還是4位元組?

用了模板?傳說有module、export、import呢客戶還要相容XP啊?v141_xp + WinSDK7考慮一下……困難?

還行吧,小時候指標還分near、far、huge呢……

為什麼說平淡生活很難?

宇宙能 人的慾望永無止境,追求慾望的過程不會平平淡淡。艱苦 緊張 壓抑 憤怒 悲傷 仇恨 許多情緒交織,造就了波瀾起伏的人生。這是常理,是內心自然主導的。反而是簡簡單的平淡,才需要去刻意去尋找。平淡是一種心態,無欲無求,自我滿足,想做到這點,難度極大。試想,人家住豪宅開豪車,你房貸車貸早已壓彎了脊背...

為什麼說做 to C 的人很難去做 to B?

甲子光年 以下為第二期 甲子直播間 特邀嘉賓遠望資本創始合夥人 迅雷創始人程浩的認知分享 首先,做to C的人,通常都是他自己產品的核心使用者。拿浩哥舉例,我創業的時候就是迅雷的核心使用者,但是做to B的創業者通常不是他產品的核心使用者。如果你是核心使用者,你和使用者需求天然就很近 不是核心使用者...

為什麼說指標是 C 語言的精髓?

悽臨雨 指標 型別 虛擬記憶體位址值 整數 指標運算 根據型別確定的寬度對位址值進行修改。其中c語言裡的型別,比c 裡的型別的功能弱的多,所以你覺得c的精髓是指標,在c 裡就是個基礎操作,沒什麼大不了的。因為c語言的語言功能太貧瘠,所以只能靠記憶體位址的修改來做事,沒它就寸步難行。 Howard J...