天天看點

《深入了解C++11:C++ 11新特性解析與應用》——1.2 今時今日的C++

如今c++依舊位列通用程式設計語言三甲,不過似乎沒有以前那麼流行了。事實上,程式設計語言排名通常非常難以衡量。比如,某位教授或學生用了c++來教授課程應該被計算在内嗎?在新的聯合攻擊戰鬥機(joint strike fighter,jsf-35)的航空電子裝置中使用了c++程式設計應該計算在内嗎?又或者c++被用于一款流行的智能手機作業系統的程式設計中算不算呢?再或者是c++被用于編寫最流行的線上付費搜尋引擎,或用于建構一款熱門的第一人稱射擊遊戲的引擎,或用于建構最熱門的社交網絡的代碼庫,這些都該計算在内嗎?事實上,據我們所知,以上種種都使用了c++程式設計。而且在建構緻力于溝通軟硬體的系統程式設計中,c++也常常是必不可少的。甚至,c++還常用于設計和編寫程式設計語言。是以我們可以認為,程式設計語言價值的衡量标準應該包括數量、新穎性、品質,以及以上種種,都應該納入“考核”。這樣一來,結論就很明顯了:c++無處不在。

如果誰說c++11隻是對c++語言做了大幅度的改進,那麼他很可能就錯過了c++11精彩的地方。事實上,讀罷本書後,讀者隻需要看一眼代碼,就可以說出代碼究竟是c++98/03的,還是c++11的。c++11為程式員創造了很多更有效、更便捷的代碼編寫方式,程式員可以用簡短的代碼來完成c++98/03中同樣的功能,簡單到你驚呼“天哪,怎麼能這麼簡單”。從一些簡單的資料統計上看,比起c++98/03,c++11大大縮短了代碼編寫量,依情況最多可以将代碼縮短30%~80%。

那麼c++11相對于c++98/03有哪些顯著的增強呢?事實上,這包括以下幾點:

《深入了解C++11:C++ 11新特性解析與應用》——1.2 今時今日的C++

表1-2列出了c++11準許通過的,且本書将要涉及的語言特性。這是一張相當長的表,而且一個個陌生的詞彙足以讓新手不知所措。不過現在還不是了解它們的時候。但看過這張表,讀者至少會有這樣一種感覺:c++11的确像是一門新的語言。如果我們将c++98/03标準中的特性和c++11放到一起,c++11則像是個恐怖的“程式設計語言範型聯盟”。利用它不僅僅可以寫出面向對象語言的代碼,也可以寫出過程式程式設計語言代碼、泛型程式設計語言代碼、函數式程式設計語言代碼、元程式設計程式設計語言代碼,或者其他。多範型的支援使得c++11語言的“硬能力”幾乎在程式設計語言中“無出其右”。

《深入了解C++11:C++ 11新特性解析與應用》——1.2 今時今日的C++
《深入了解C++11:C++ 11新特性解析與應用》——1.2 今時今日的C++
《深入了解C++11:C++ 11新特性解析與應用》——1.2 今時今日的C++

而從另一個角度看,程式設計中程式員往往需要将實物、流程、概念等進行抽象描述。但通常情況下,程式員需要抽象出的不僅僅是對象,還有一些其他的概念,比如類型、類型的類型、算法,甚至是資源的生命周期,這些實際上都是c++語言可以描述的。在c++11中,這些抽象概念常常被實作在庫中,其使用将比在c++98/03中更加友善,更加好用。從這個角度上講,c++11則是一種所謂的“輕量級抽象程式設計語言”(lightweight abstraction programming language)。其好處就是程式員可以将程式設計的重點更多地放在設計、實作,以及各種抽象概念的運用上。

總的來說,靈活的靜态類型、小的抽象概念、絕佳的時間與空間運作性能,以及與硬體緊密結合工作的能力都是c++11突出的亮點。而反觀c++98/03,其最強大的能力則可能是展現在能夠建構軟體基礎架構,或建構資源受限及資源不受限的項目上。是以,c++11也是c++在程式設計語言領域上一次“泛化”與進步。

要實作表1-2中的各種特性,需要編譯器完成大量的工作。對于大多數編譯器供應商來說,隻能分階段地釋出若幹個編譯版本,逐漸支援所有特性(羅馬從來就不是一天建成的,對吧)。大多數編譯器已經開始了對c++11特性的支援。有3款編譯器甚至從2008年前就開始支援c++11了:ibm的xl c/c++編譯器從版本10.1開始。gnu的gcc編譯器從版本4.3開始,英特爾編譯器從版本10.1開始。而微軟則從visual studio 2010開始。最近,蘋果的clang/llvm編譯器也從2010年的版本2.8開始支援c++11新特性,并且急速追趕其他編譯器供應商。在本書附錄c中,讀者可以找到現在情況下各種編譯器對c++11的支援情況。

繼續閱讀