1. 程式人生 > 實用技巧 >C++——各版本新特性

C++——各版本新特性

C++ 11

  • auto關鍵字
  • decltype關鍵字
  • nullptr字面值
  • constexpr關鍵字
  • for(declaration : expression)
  • Lambda表示式
  • initializer_list
  • 標準庫bind函式
  • 智慧指標shared_ptr,unique_ptr
  • 右值引用&&
  • STL容器std::array,std::forward_list,std::unordered_map,std::unordered_set

C++ 14

  • 拓展了lambda表示式,更加泛型:支援auto
  • 拓展了型別推導至任意函式:C11只支援lambda返回型別的auto
  • 棄用關鍵字 [[deprecated]]

C++ 17

  • 拓展了constexpr至switch if等:C++11的constexpr函式只能包含一個表示式
  • typename 巢狀
  • inline 內聯變數
  • 模板引數推導
  • 元組類 std::tuple:std::pair實現兩個元素的組合,它實現多個
  • 類模板std::variant表示一個型別安全的聯合體。
  • 引用包裝器 std::reference_wrapper
  • 變長引數模板
  • 結構化繫結(函式多值返回時用{}合成struct)
  • 非型別模板引數可傳入類的靜態成員
  • 在if和switch中可進行初始化
  • 初始化(如struct)物件時,可用花括號進行對其成員進行賦值
  • 簡化多層名稱空間的寫法
  • lambda表示式可捕獲*this的值,但this及其成員為只讀
  • 十六進位制的單精度浮點數
  • 繼承與改寫建構函式
using B1::B1;//表示繼承B1的建構函式
  • 當模板引數為非型別時,可用auto自動推導型別
  • 判斷有沒有包含某檔案__has_include
  • [[fallthrough]]用於switch語句塊內,表示會執行下一個case或default
  • [[nodiscard]]表示函式的返回值沒有被接收,在編譯時會出現警告。
  • [[maybe_unused]]即便沒使用也不警告

https://blog.csdn.net/qq811299838/article/details/90371604

C++ 20

  • concept用於宣告具有特定約束條件的模板型別
// 宣告一個數值型別的concept
template<typename T>
concept number = std::is_arithmetic<T>::value;
  • 範圍庫(Ranges Library)
  • 協程(Coroutines)
  • 模組(modules)