打開CSDN,突然發現最近在黑MFC。其實討論的重點就在于一點“新手要不要學習MFC”。所以希望雙方的辯手在辯論時千萬不要偏離了重點。現在我作為中立方來評論一下。
其實,目前在windows下的開發,選擇并不多,無非就是MFC和QT,其他的第三方還有一些庫,但使用的范圍不大,所以就排行榜前2名進行討論。在今年的微軟開發大會上,我很有幸提問了一個問題“我發現今天大會上展示的例子多是用C#撰寫的,微軟是否在有意淡化C++的地位。對于C++來說,多年來幾乎沒有發展,例如在GUI方面,C++實作十分麻煩。在微軟內部,對于這兩種語言的發展是如何定位的?”。來自微軟的技術人員,聽完我的問題后,不約而同的搖頭,其實,微軟并沒有淡化C++的地位,相反,微軟在C++上面一直不懈的在努力。但我們可以清晰的發現,微軟在同時走兩條路,一是夯實基礎,就是C++基礎方面。C/C++屬于中級語言,相對于VB,C#之類的高級語言麻煩,相對于匯編語言之類又簡單。所以C/C++是面向高性能用戶的,CryEngine,Unreal,Frost等世界頂級的游戲引擎底層用的是什么,雖然我看不到他們的源代碼,但我肯定是C++的,為什么?高性能的需要,只有C/C++接近硬體似得操作使得可以最大限度的對硬體資源和演算法進行優化。當然,代價就麻煩,學習起來十分困難。當然,大家又有人噴了,我又不是開發游戲引擎的。是的,你不用,不代表這些方面沒有市場,有人要用。你可以用簡單的,微軟不是給你準備好了C#了嗎?一會再說。微軟近幾年在C++上面的努力是有目共睹的,我簡單的列舉幾個方面,VC6作為經典的一代,但有很多弊端,如語法檢查不嚴,最頭疼莫過于for(int i; i < 10; i++ )的定義,VC6是不支持的,但從VC7(2003)開始就立刻糾正了這個問題,對C/C++的支持越來越好,隨著Borland的沒落,微軟成了最大的,實力最強的C/C++的編譯器。2005當時是對C++標準支持最高的。由于MFC對界面支持不好,從2008SP1開始,微軟收購了BCG界面庫集成到MFC中,但那酸爽,實在是……,顯示效果一團糟。所以從2010開始,微軟估計從底層調整了界面部分,而且,最讓我欣慰的是,VC6的經典Classwizard又回來了。至于2012、2015等新版本,不好意思,我沒有過,無法評價。而且VC是個很龐大的東西,我也只是用到了僅有的一點點功能,很多功能都用不上,所以我的評價也不夠客觀。但僅從我用的這點功能就可以看出微軟一直在進步。而且還可以看出,微軟在C++的努力確實不多,為什么呢,因為畢竟面向的是少數的用戶,所以從戰略上講,微軟確實不能投入過大的經歷。引擎類的公司有幾個用MFC的?人家用自己的庫。正式因為微軟對MFC的定位,所以微軟大力在發展C#,C#在跨平臺,快速開發上確實有優勢。
再說QT,QT是一個跨平臺的庫,QT相對MFC來說最大的優勢就在于GUI的開發,我們也一直在想,對于微軟這樣的公司來說,使用拖拉控制元件的方式很容易的,而MFC在GUI方面一直沒有努力。因為微軟認識到,即使在這方面做好了,意義也不會很大,不是嗎?不如把有限的資源,放到C#上。QT號稱的跨平臺其實意義不大,最大的好處在于GUI的快速開發。而且QT也有各種豐富的集成庫,可以實作各種功能。QT我用的不多,所以不做過多的評價。
至于新手學什么,要看你做什么,如果是在校學生,時間比較充足,學什么都可以,MFC也不是打基礎用的,基礎是C/C++演算法,演算法資料結構之類的才是基礎,MFC只是一個工具而已,就MFC而言,我也只是用對話框而已,什么單檔案,多檔案從來沒用過,學MFC也不是全部系統的都學。如果是已經作業,或是面向作業,QT也是不錯的選擇,主要要根據所從事的專案來進行選擇。
所以最后而言,我的結論就是,爭論的意義不大。因為,QT和MFC就是兩個工具,好比WPS和WORD是兩個編輯器一樣,無所謂哪個好哪個壞,選哪個都是一樣的。你可以問一下使用QT和MFC的人,沒有誰把整個全學會的,比如QT,都只是使用了一點小功能而已。然后從一個小功能切入,逐漸了解整個架構。大家都說QT的優勢在于界面功能強大,僅此而已,其實,MFC中界面是麻煩了一些,但也不是不可接受。做過專案的都知道,程式中最重要的是架構,其次是演算法,最后是界面實作。架構和演算法都是獨立于編程語言之外的,雖然我沒學過QT,但我維護過QT的專案,可以很輕松的維護,以為具體的思想是一樣的。所以,最后,無論MFC還是QT都不要互黑了,各有優劣,真正到專案里面,無論QT還是MFC都用不上,用的是基本的演算法思想。
uj5u.com熱心網友回復:
支持理性的討論,MS近1年開放開源的勢頭很足,要是把MFC全部開源就好了,uj5u.com熱心網友回復:
各有各的優點,MFC和QT的優點都用在IOS開發上,那寫出來的ios代碼絕對不會差uj5u.com熱心網友回復:
MFC本來就帶全部原始碼的
uj5u.com熱心網友回復:
VC是VC MFC是MFC, MFC過時不代表VC不好用。在對C++標準支持來說,一直是最落后的。gcc clang intel C++都比VC的好很多。
不建議的根本在于,桌面軟體早就落沒了。市場早就轉到 web 然后再轉到 移動開發了。
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
QT的資料實在少,就怕花了很多時間,走了很多彎路總結的東西,仍然是片面或者錯誤的。所以新手學也不好uj5u.com熱心網友回復:

說得還是蠻有道理的~
uj5u.com熱心網友回復:
總體來說, QT 是 比 MFC 好。問題延伸一點說, 應該是:微軟是否真得大家跟著它走?
這個問題更好回答: 別人都不要你了, 你還把臉貼到屁股上去?
uj5u.com熱心網友回復:
除非是做嵌入式系統,用QT做嵌入式系統的界面不錯。在我眼里,QT只不過是拿來寫Demo的工具。寫個Demo只圖快,更不考慮MFC了。現在正式的windows應用的開發中用C#做界面和大部分常規操作,只用C++撰寫一部分不希望被人反編譯或者追求性能的部分。
剛看到這個標題,我還真以為這是幾年前的帖子。
uj5u.com熱心網友回復:
另外,確實沒有必要了解QT和MFC的全部,我同意樓主的觀點uj5u.com熱心網友回復:
C++11并非每個新特性都值得稱道。
我倒不希望那些稀奇古怪的語法搞亂我的專案。
確實沒必要學,現在學C++不是為了做桌面開發的
uj5u.com熱心網友回復:
管他有沒有用,先學了再說uj5u.com熱心網友回復:
lz 提到了C++標準支持問題,那就說兩句而已,用不用什么特性看專案要求。
uj5u.com熱心網友回復:
MFC學不學我不知道,反正我用了MFC 3年,QT 2 年,QT甩MFC 300條街uj5u.com熱心網友回復:
Qt 的 slot 依賴的也是 message 或者 signal,和MFC本質是一樣的,但集成了比MFC更豐富、易用的庫,從界面開發看,Qt要比MFC有優勢;但現在應用程式發展的方向越來越web化、移動化,這方面Qt和MFC都不具備優勢;
而且從桌面應用看,MVC的架構無處不在,一個應用是多個framework的集成、優勢互補的結果,Qt、MFC或者C#都只是提供一種可行性。
uj5u.com熱心網友回復:
QT與MFC來說,MFC效率仍高于QT,如果你是一個效率控
uj5u.com熱心網友回復:
學習。。。。。uj5u.com熱心網友回復:
樓主這么喜歡底層怎么不直接從windows api上手啊? 什么mfc,qt都見鬼去吧!uj5u.com熱心網友回復:
有時間就學,學什么都是學,多個技能傍身就多一個飯碗。沒有什么是沒用的。uj5u.com熱心網友回復:
說的好,支持一下,我在小公司做了幾個安全專案,全是基于mfc 的,qt沒涉及過有機會還是想學學uj5u.com熱心網友回復:
在程式運行效率上,MFC遠大于QT,而QT遠大于C#,我做過對比測驗的,尤其是拿QT的元物件系統跟C#的元資料系統對比,其實不比都能猜測出結果,QT的元物件系統是編譯型的,C#的是半編譯或者是解釋型的,而無論哪種型,元物件/資料系統的動態能力跟采用無動態能力二進制呼叫的MFC相比也是差距巨大。uj5u.com熱心網友回復:
所以先去學好c++uj5u.com熱心網友回復:
vc嵌入qt做界面uj5u.com熱心網友回復:
把基礎知識打扎實了,干什么都行,Qt雖然封裝了不同的類別庫,但是基礎語言也是C++我先是做了幾年MFC,后來又做了一年純C++,現在正好在做Qt,以我的經驗來說,雖然之前從來沒用過Qt,但是可以瞬間上手做專案,邊做邊學,沒什么挑戰
不過上面 akirya 說的好:桌面軟體早就落沒了。市場早就轉到 web 然后再轉到 移動開發了。
uj5u.com熱心網友回復:
桌面軟體早就落沒了,我想這是雙方都認同的uj5u.com熱心網友回復:
都用就可了
uj5u.com熱心網友回復:
想移一個串口終端到QT的,單檔案界面,控制元件重繪,自定義訊息,滑鼠操作,界面重繪時間.....各種郁悶。QT在視窗全屏的情況下,重繪整個畫面需要多少毫秒? 這個有人知道的嗎?
uj5u.com熱心網友回復:
支持樓主真學習的時候,挑三揀四的都是2B
真應用的時候,抱殘守缺的都是SB
uj5u.com熱心網友回復:
嚴重支持樓主uj5u.com熱心網友回復:
MFC用了2年,系統學習了一下,Qt用什么學什么,總感覺沒掌握精髓。uj5u.com熱心網友回復:
VC是VC MFC是MFC, MFC過時不代表VC不好用。
在對C++標準支持來說,一直是最落后的。gcc clang intel C++都比VC的好很多。
不建議的根本在于,桌面軟體早就落沒了。市場早就轉到 web 然后再轉到 移動開發了。
朋友,工業的用途沒有民用多嗎?
移動?你到汽車生產線把控制系統Web一個我看看?
沒有基礎網路和資料集成中心,辦公自動化就是個草包。
枝干代替不了樹葉,樹葉就可以代替枝干嗎?
另外,Web同樣是一個桌面軟體,不是批了層皮就能裝的
資料交換那么多層協議,Web只是站最外面一層漏臉而已
沒有那么多所謂的桌面軟體,Web一個爛解釋器呼叫基礎都沒有了能有用?
你見過只有衣服沒有骨肉的人嗎?
uj5u.com熱心網友回復:
同意樓上的,系結uj5u.com熱心網友回復:
同意樓山的,幫頂uj5u.com熱心網友回復:
C++在某些方面的應用具有其它語言所不具備的優勢。但是它有學習周期長,不擅長web開發等缺點,而且這些年,硬體性能的不斷提高,在很多對資源、性能要求不是非常苛刻的地方,都用其它語言的開發包替代了。C++的應用范圍越來越窄。很多公司不招聘C++開發人員,或者只讓其做一些插件、動態庫,結果,真正要用C++解決一些難題時,要么無人可用,要么那些平時只做C++插件開發的人辦不了。
uj5u.com熱心網友回復:
C++在某些方面的應用具有其它語言所不具備的優勢。但是它有學習周期長,不擅長web開發等缺點,而且這些年,硬體性能的不斷提高,在很多對資源、性能要求不是非常苛刻的地方,都用其它語言的開發包替代了。C++的應用范圍越來越窄。
很多公司不招聘C++開發人員,或者只讓其做一些插件、動態庫,結果,真正要用C++解決一些難題時,要么無人可用,要么那些平時只做C++插件開發的人辦不了。
說的是啊,現在熱門的大多是前端,各種語言也層出不窮,C++人員的需求量也相對較少了。
uj5u.com熱心網友回復:
支持樓主
真學習的時候,挑三揀四的都是2B
真應用的時候,抱殘守缺的都是SB
呵呵。
uj5u.com熱心網友回復:
c++需求量沒少,只是互聯網那邊的編程增加了,對于大部分人來說,學c/c++進度慢,起步工資低,當然學的人就少了。qt沒用過,跨平臺不是理由,商用軟體都是提供不同的版本,甚至娛樂軟體也是提供不同的版本。
都說mfc做界面太費勁,一個不太大的程式中,界面就已經不是主要部分,而且界面美丑因人而異,要說win 95時代的程式放在今天多么漂亮,當然是太固執了,但是說蘋果的界面多美觀,恐怕不喜歡的人也大有人在。
uj5u.com熱心網友回復:
c++需求量沒少,只是互聯網那邊的編程增加了,對于大部分人來說,學c/c++進度慢,起步工資低,當然學的人就少了。
qt沒用過,跨平臺不是理由,商用軟體都是提供不同的版本,甚至娛樂軟體也是提供不同的版本。
都說mfc做界面太費勁,一個不太大的程式中,界面就已經不是主要部分,而且界面美丑因人而異,要說win 95時代的程式放在今天多么漂亮,當然是太固執了,但是說蘋果的界面多美觀,恐怕不喜歡的人也大有人在。
這只兔子說的對,語氣比較中性,好聽
不像我,碰到某些人就火大
uj5u.com熱心網友回復:
我能吐槽觸摸屏不如鍵盤滑鼠可靠嗎?uj5u.com熱心網友回復:
我能吐槽觸摸屏不如鍵盤滑鼠可靠嗎?
不用吐槽,就是不可靠,所以只用在花錢的領域,不用在賺錢的領域。
uj5u.com熱心網友回復:
我能吐槽觸摸屏不如鍵盤滑鼠可靠嗎?
不用吐槽,就是不可靠,所以只用在花錢的領域,不用在賺錢的領域。
我能吐槽手機電池不給力嗎?
我能吐槽手機比臺式機更容易摔壞嗎?
我就要走在老路上,我就要回到老地方,啊哦,——《花房姑娘》
uj5u.com熱心網友回復:
我能吐槽手機害了很多低頭族嗎?
我能吐槽手機讓員工隨時隨地加班更容易導致過勞死嗎?uj5u.com熱心網友回復:
我能吐槽觸摸屏不如鍵盤滑鼠可靠嗎?
不用吐槽,就是不可靠,所以只用在花錢的領域,不用在賺錢的領域。
我能吐槽手機電池不給力嗎?
我能吐槽手機比臺式機更容易摔壞嗎?
我就要走在老路上,我就要回到老地方,啊哦,——《花房姑娘》
俺已經致力于干這些事了,在俺的忽悠下,俺的同事都開始一起忽悠沒有鍵盤的游戲不能玩,沒有滑鼠的游戲不能玩,以前有自--殺傾向的人,現在都嘗試殺--人了。
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
重要的是能完成作業。精一門,其它的都很容易上手的。
uj5u.com熱心網友回復:
支持理性的討論,MS近1年開放開源的勢頭很足,要是把MFC全部開源就好了,
MFC本來就帶全部原始碼的
uj5u.com熱心網友回復:
如果做行業應用,比如工具軟體,類似,用于處理電子顯微鏡捕獲視頻的專業工具,建議直接Qt。uj5u.com熱心網友回復:
如果是消費類的,直接學Web吧uj5u.com熱心網友回復:
不知道,感覺MFC慢慢也少人用了。。。C++也難找作業轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/82946.html
標籤:非技術類
