在芬蘭奧盧的最後一場會議中,iso c++委員會完成了c++17功能清單的定義。在會議中,通過了許多新的語言和庫的功能,包括constexpr if、template 、結構化綁定和一些其他的功能。
正如委員會成員jens weller所寫道,現在功能清單已經完成,即将開始複查階段:
接下來的兩次會議主要會推進複查、回報和國家級機構标記的問題。這不會給标準增加新的内容,但是可能有輕微或重大變化。
在奧盧的最後一次委員會議上,c++17新增的功能中,weller強調了以下功能:
std::variant,它提供了一個安全、範式、基于棧的可差別union容器。
if constexpr(expression),它可以看作c++版本中編譯期的 if。
template auto,它允許使用auto聲明非類型的模版參數。這會允許開發者們寫這樣的代碼:
template void f() { }f<10>; // deduces int
herb sutter強調了這個功能開啟的許多可能性,例如在一個函數模版内部而不是通過許多模闆特化來囊括所有它的算法特例情況。
結構化綁定,它使得在元組中聲明并初始化多個變量成為可能:
tuple get_tuple();auto [a , b , c] = get_tuple();
if和which中的變量聲明與for循環中已經允許的格式相似:
map mymap;if (auto result = mymap.insert(value); result.second) {// insert succeeded, and result is valid for this blockuse(result.first); // ok// ...}
另外,sutter提到了其他一些值得強調的新特性,包括:
為位元組對齊資料動态記憶體配置設定保證副本省略,這可以確定當你使用一個值傳遞的對象來初始化本地變量時,編譯器不會執行任何額外的複制或移動,就像c++11裡一樣。
上面的清單中隻包括了上一次委員會議中通過的新特性,但是新c++17中的功能清單部分會更長一些。如欲擷取稽核過程結束後新标準中的内容概覽,請在stack overflow跟帖中檢視。
====================================分割線================================
本文轉自d1net(轉載)