優(yōu)選答案
TIOBE 世界編程語言排行榜2009年2月榜單。 2011年12月5日Tiobe發(fā)布了2011年12月的編程語言排行榜。新一期排行榜Objective-C持續(xù)給力躍居第五位,而上一期關注的谷歌Dart語言也上升到第68名,但PHP由第四位跌到第6名。從2001年Tiobe編程語言排行榜開始發(fā)布至今,C++幾乎一直占據(jù)著第三名。雖然Perl,Visual Basic和PHP曾經(jīng)也排到第3名,但和C++相比,他們就顯得不值一提了,因為他們最多只能保持幾個月而已。然而相比C++,微軟的編程語言C#卻更被看好,甚至有人認為C#勢必會取代C++,C++是垃圾語言。因為微軟的大力推廣,使用C#的人越來越多,而老將C++卻正在被人遺忘。不甘寂寞,2011年C++再次亮劍,13年來第一個重大修訂版,C++11橫空出世!
下面是前20名的編程語言排行
掀起C++ 11的神秘面紗
C++標準在1998年獲得通過后,有兩位委員會委員預言,下一代C++標準將“肯定”包括內(nèi)置的垃圾回收器(GC),但可能不會支持多線程,因為定義一個可移植的線程模型涉及到的技術太復雜了,13年后,新的C++標準C++11也接近完成,你猜怎么著?讓那兩位委員沒想到的是,本次更新還是沒有包括GC,但卻包括了一個先進的線程庫。C++之父Bjame Stroustrup說C++11就像一個新語言,的確,C++11核心已經(jīng)發(fā)生了巨大的變化,它支持Lambda表達式,對象類型自動推斷,統(tǒng)一的初始化語法,委托構造函數(shù),deleted和defaulted函數(shù)聲明nullptr,以及最重要的右值引用。
C++11中值得關注的幾大變化
◆Lambda表達式
◆自動類型推斷和decltype
◆統(tǒng)一初始化語法
◆Deleted和Defaulted函數(shù)
◆nullptr
◆委托構造函數(shù)
◆右值引用
C++11標準庫
C++于2003年以庫技術報告1(TR1)的形式經(jīng)歷了重大改版,TR1包括新的容器類(unordered_set,unordered_map,unordered_multiset和unordered_multimap)和多個支撐正則表達式、元組和函數(shù)對象封裝器等的新庫。隨著C++11標準獲得通過,TR1和自它首次發(fā)布以來新增的庫被正式納入標準的C++標準,下面是C++11標準庫的一些特性:
線程庫
站在程序員的角度來看,C++11最重要的新功能毫無疑問是并行操作,C++11擁有一個代表執(zhí)行線程的線程類,在并行環(huán)境中用于同步,async()函數(shù)模板啟動并行任務,為線程獨特的數(shù)據(jù)聲明thlocal存儲類型。如果你想找C++11線程庫的快速教程,請閱讀Anthony William的“C++0x中更簡單的多線程”。
新的智能指針類
C++98只定義了一個智能指針類auto_ptr,它現(xiàn)在已經(jīng)被廢棄了,C++11引入了新的智能指針類shared_ptr和最近添加的unique_ptr,兩者都兼容其它標準庫組件,因此你可以在標準容器內(nèi)安全保存這些智能指針,并使用標準算法操作它們。
新的算法
C++11標準庫定義了新的算法模仿all_of(),any_of()和none_of()操作,下面列出適用于ispositive()到(first, first+n)范圍,且使用all_of(), any_of() and none_of() 檢查范圍的屬性的謂詞:
#include<algorithm>//C++11 code //are all of the elements positive? all_of(first, first+n, ispositive()); //false //is there at least one positive element? any_of(first, first+n, ispositive());//true // are none of the elements positive?
none_of(first, first+n, ispositive()); //false
一種新型copy_n算法也可用了,使用copy_n()函數(shù),復制一個包含5個元素的數(shù)組到另一個數(shù)組的代碼如下:
#include
int source[5]={0,12,34,50,80};
int target[5];
//copy 5 elements from source to target
copy_n(source,5,target);
算法iota()創(chuàng)建了一個值順序遞增的范圍,好像分配一個初始值給*first,然后使用前綴++使值遞增,在下面的代碼中,iota()分配連續(xù)值{10,11,12,13,14}給數(shù)組arr,并將{‘a(chǎn)’,’b’,’c’}分配給char數(shù)組c。
include<numeric>
int a[5]={0};
char c[3]={0};
iota(a, a+5, 10); //changes a to {10,11,12,13,14}
iota(c, c+3, 'a'); //{'a','b','c'}
C++11仍然缺乏一些有用的庫,如XML API,套接字,GUI,反射以及前面提到的一個合適的自動垃圾回收器,但C++11的確也帶來了許多新特性,讓C++變得更加安全,高效,易學易用。
如果C++11的變化對你來說太大的話,也不要驚慌,多花些時間逐漸消化這一切,當你完全吸收了C++11的變化后,你可能就會同意Stroustrup的說法:C++11感覺就像一個新語言,一個更好的新語言。