程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C++ 14 新特性總結

C++ 14 新特性總結

編輯:關於C語言
 

C++14 這一繼C++11 之後的新的 C++ 標准已經被正式批准,正在向 ISO 提交,將於年內發布。C++之父 Bjarne Stroustrup 說道,盡管與C++11 相比,C++14 的改進“有意做的比較小”,但是仍然為用戶“帶來了極大的方便”,是實現使C++“對新手更為友好”這一目標的步驟之一。

在 C++ 的時間表中,C++14 按計劃是一個小版本,完成制定C++11 標准的剩余工作,目的是使 C++ 成為一門更清晰、更簡單和更快速的語言。新的語言特性留到了未來的C++17 標准中。

C++14 的主要特性可以分為三個領域:Lambda 函數、constexpr 和類型推導。

Lambda 函數

C++14 的泛型 Lambda 使編寫如下語句成為可能:

auto lambda = [](auto x, auto y) {return x + y;};

而另一方面,C++11 要求 Lambda 參數使用具體的類型聲明,比如:

auto lambda = [](int x, int y) {return x + y;};

此外,新標准中的 std::move 函數可用於捕獲 Lambda 表達式中的變量,這是通過移動對象而非復制或引用對象實現的:

std::unique_ptr ptr (new int (10));auto lambda = [value = std::move (ptr)] {return *value;};

constexpr

在C++11 中,使用 constexpr 聲明的函數可以在編譯時執行,生成一個值,用在需要常量表達式的地方,比如作為初始化模板的整形參數。C++11 的 constexpr 函數只能包含一個表達式,C++14 放松了這些限制,支持諸如 if 和 switch 等條件語句,支持循環,其中包括基於區間(range)的 for 循環。

類型推導

C++11 僅支持 Lambda 函數的類型推導,C++14 對其加以擴展,支持所有函數的返回類型推導:

auto DeducedReturnTypeFunction ();

因為C++14 是強類型語言,有些限制需要考慮:

  • 如果一個函數的實現中有多個返回語句,這些語句一定要推導出同樣的類型。
  • 返回類型推導可以用在前向聲明中,但是在使用它們之前,翻譯單元中必須能夠得到函數定義。
  • 返回類型推導可以用在遞歸函數中,但是遞歸調用必須以至少一個返回語句作為先導,以便編譯器推導出返回類型。

C++14 帶來的另一個類型推導方面的改進是 decltype (auto)語法,它支持使用與 auto 同樣的機制計算給定表達式的類型。auto 和 decltype 在C++11 中就已經出現了,但是它們在推導類型時使用了不同的機制,這可能會產生不同的結果。

C++14 中的其他改變包括可以聲明變量模板,支持使用 0b 或 0B 前綴來聲明二進制字面常量。InfoQ 已經介紹過C++14 中可能破壞C++11 程序的其他小型修改。

主流 C++ 編譯器對新語言特性的支持正在有條不紊地開發:Clang“完全實現了當前草案的所有內容”;GCC 和 Visual Studio 也對C++14 的新特性提供了一些支持。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved