天天看點

vc2010 and c++ 0x

  新特性之一:Lambda表達式.

很多程式設計程式設計語言都支援匿名函數(anonymous function)。所謂匿名函數,就是這個函數隻有函數體,而沒有函數名。Lambda表達式就是實作匿名函數的一種程式設計技巧,它為編寫匿名函數提供了簡明的函數式的句法。同樣是Visual Studio中的開發語言,Visual Basic和Visual C#早就實作了對Lambda表達式的支援,終于Visual C++這次也不甘落後,在Visual Studio 2010中添加了對Lambda表達式的支援。

eg:

sort( intvec.begin(), intvec.end, [](int& l, int& r){return l<r} )

int x=0;

// 讓lambda可以通路外面的變量

sort( intvec.begin(), intvec.end, [x](int& l, int& r){return (l+x)<r} )

新特性之二:靜态斷言static_assert

在新的C++标準C++0x中,加入了對靜态斷言的支援,引入了新的關鍵字static_assert來表示靜态斷言。使用靜态斷言,我們可以在程式的編譯時期檢測一些條件是否成立,這個特性在調試模闆函數的模闆參數時特别有用。在編譯的時候,模闆函數執行個體化,這時我們就可以使用靜态斷言去測試模闆函數的參數是否按照我們的設計擁有合适的值。

此外,靜态斷言還帶來很多其他的優勢。例如靜态斷言在編譯時進行處理,不會産生任何運作時刻空間和時間上的開銷,這就使得它比assert宏具有更好的效率。另外比較重要的一個特性是如果斷言失敗,它會産生有意義且充分的診斷資訊,幫助程式員快速解決問題。

新特性之三:auto關鍵字

在C++0x中,auto關鍵字的意義發生了改變。從Visual C++ 2010開始,auto關鍵字将用于指引編譯器根據變量的初始值來決定變量的資料類型。換句話說,我們可以把auto當成一種新的資料類型,它可以“從初始化器(initialize)中推導出所代表的變量的真正類型”。這種對auto關鍵字的使用方式可以大大消除目前替代方式所導緻的冗長和易出錯的代碼。

eg:

for( auto it=intvec.begin(); it!=intvec.end();++it )

{ std::cout<<*it<<std::endl; }

新特性之四:右值引用

作為最重要的一項語言特性,右值引用(rvalue references)被引入到 C++0x中。我們可以通過操作符“&&”來聲明一個右值引用,原先在C++中使用“&”操作符聲明的引用現在被稱為左值引用。 左值引用和右值引用的表現行為基本一緻,它們唯一的差别就是右值引用可以綁定到一個臨時對象(右值)上,而左值引用不可以。

具體的釋出和下載下傳資訊大家可以到官網上查查。

繼續閱讀