目錄
if init表示式
structual bindings
inline變數
std::string_view
c++17語言引入了乙個新版本的if/switch
語句形式,if (init; condition)
和switch (init; condition)
,即可以在if
和switch
語句中直接對宣告變數並初始化,如下:
if(const auto it = mystring.find("hello"); it != string::npos)
if(const auto it = mystring.find("world"); it != string::npos)
如此一來,val
僅在if
和else
中可見,不會洩漏到其他作用域中去了。switch也支援initializatioin
典型場景如下:
// 1 結構體和陣列
struct mystruct ;
mystruct getstruct() ;
}auto [id, val] = getstruct(); // id = i, val = s
//陣列也適用
int arr = ;
auto [x, y] = arr;
// 2 簡化map的使用
for (const auto& elem: my_map)
for (const auto& [key, val]: my_map)
// 3 簡化tuple
tuplefunc();
//before c++17
auto tup = func();
int i = get<0>(tup);
string s = get<1>(tup);
//or
int i;
string s;
std::tie(i, s) = func();
//c++17
auto [ i, s ] = func();
c++11支援類體內初始化, 但是只能是const成員, 非const只能放在class外
c++17後, 通過inline
支援類體內初始化, 可以更好的支援head-only
struct myclass ;
std::string呼叫sub_str()的時間複雜度是o(n);
sts::string_view呼叫sub_str()的時間複雜度是o(1);
參考:
總結目前來看更多的是語法糖,尚需進一步的學習。
主要參考:
C 17 之 新的 初始化規則
c 11 引入列表初始化,即使用的方式對聚合型別進行初始化.聚合型別在 iso iec14882 2017 11.6.1 描述,表示陣列或類 c 11 的列表初始化規則,在與 auto 聯合使用時經常無法達到程式設計師的期望並出錯,因此 c 17 對列表初始化規則進行增強.在使用具體資料型別 不需要...
C 17 之 結構繫結
注意 結構繫結 structured binding 位於iso iec14882 2017 11.5 節.結構繫結的作用是方便從其它資料結構中提取資料,如 pair,tuple,陣列等.通過結構繫結,可以替代 c 17 之前的 std tie,並且使用更加方便.通用的宣告方式為 auto v1,v...
c (17)一 二兩章回顧
前些天基本上每天都會花一兩個小時看書,系統的學習c 內容,彌補之前不足之處。經過了一段時間之後,已經看了兩章內容了,又一些內容是之前早就會的,當然也有一部分是自己新學到的,還有一部分是c 11新規定的內容。為了避免出現學完忘光的情況,沒過一段時間我會回顧之前所學,加深印象。今天早上的時候,回頭看了第...