標籤:

現在C++開發是不是都遵守C++11標準,Linux下的多線程編程是優先考慮C++11的線程庫,還是用系統線程API封裝?


第一個問題跟你用的編譯器版本有關。不過,就算不使用C++11的新功能,也至少要讓代碼能在C++11下乾淨地編譯通過,這樣以C++11方式編譯出來的程序能獲得免費的性能提升(比如,受益於移動語義,vector& 的 push_back 在 resizing 的時候不會真的複製已有的字元串。)

第二個問題,先是跟你現有的 code base 有關,如果已經用了某個足夠好的線程庫,看不出換 C++11 線程庫的必要。如果重頭開始寫,也沒有別的C++線程庫可用,那麼用C++11線程庫也未嘗不可。當然,也不是非用不可,不考慮可移植性的話,自己拿系統API封裝一個線程庫也就是兩三百行的代碼量,一下午就搞定了。


第一個問題:取決於你們公司的編譯器版本。然而,恐怕事實情況是C++11進入生產環境還需一段時間,大公司的代碼都是上百萬行的。重構和升級不是相干就干。我記得有人提過,騰訊和百度也只是用g++4.4左右的版本。(此處不確定)

第二個問題:取決於你有沒有跨平台的需求。如果沒有,盡量不要用。

我一直認為大部分軟體都沒必要跨平台。專業定製多好呀,我就選用Linux開發服務端,那我還做什麼iocp的,做專做精即可。不過似乎現在大家都喜歡拿跨平台作為賣點。例如asio那種扭曲的東西。


新的項目都建議用c++11,各個不同的操作系統都有對c++11實現,從代碼的可讀性,可維護性,以及開發的簡易性來看,c++11都是一個更好的選擇,gcc 4.8對c++11已經支持得很好了。


linux下最好用posix線程庫啊


我們公司沒用c++11,一直在用c++ 98/03。不想增加成本,不想變化。

c++11的thread庫完全沒法用,功能太弱了。


公司對生產環境有要求,gcc版本有限制。為了保證可用性,使用系統api封裝更合適。


推薦閱讀:

大學C++應該怎麼學?
用很厚的教材學編程的時候,該如何一邊攤開書一邊敲代碼?
如何讓編譯器在預處理時在一個項目中的某些指定文件中每一個函數定義前插入一個宏?
C++ 03和C++11的vector在調用元素的構造函數時有什麼區別?
為什麼C++ 中 void * 能指向靜態成員函數但不能指非靜態向成員函數?

TAG:C |