[英]What are the new features in C++17?
C++17 現在功能完整,所以不太可能經歷大的變化。 為 C++17 提出了數百個提案。
在 C++17 中,C++ 中添加了哪些特性?
當使用支持“C++1z”的 C++ 編譯器時,當編譯器更新到 C++17 時,哪些特性將可用?
[*this]{ std::cout << could << " be " << useful << '\\n'; }
using
in 屬性以避免重復屬性命名空間。
現在要求編譯器忽略他們不認識的非標准屬性。
簡單的static_assert(expression);
沒有字符串
std::tie
與auto
const auto [it, inserted] = map.insert( {"foo", bar} );
it
並inserted
從與推定的類型pair
那個map::insert
回報。std::array
和相對扁平的結構 if (init; condition)
和switch (init; condition)
if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
if(decl)
擴展到decl
不能明智地轉換為 bool 的情況。.then
用於未來的工作。前向進度保證 (FPG)(還有用於並行算法的FPG)
u8'U', u8'T', u8'F', u8'8'
字符字面量(字符串已經存在)
std::string
類似於對字符數組或子std::string
引用string const&
了。 還可以使解析速度快 bajillion 倍。"hello world"sv
char_traits
std::byte
比他們可以咀嚼的還要多。
std::invoke
std::apply
std::make_from_tuple
, std::apply
應用於對象構造
is_invocable
, is_invocable_r
, invoke_result
result_of
is_invocable<Foo(Args...), R>
是“你能用Args...
調用Foo
Args...
並獲得與R
兼容的東西”,其中R=void
是默認值。invoke_result<Foo, Args...>
是std::result_of_t<Foo(Args...)>
但顯然不那么令人困惑? [class.directory_iterator]
和[class.recursive_directory_iterator]
[class.directory_iterator]
[class.recursive_directory_iterator]
for_each_n
reduce
transform_reduce
exclusive_scan
inclusive_scan
transform_exclusive_scan
transform_inclusive_scan
添加用於線程目的,即使您不使用線程也會暴露
atomic<T>
::is_always_lockfree
std::lock
痛苦。std
算法的並行版本和相關機制[func.searchers]
和[alg.search]
std::function
std::sample
,從一個范圍采樣?
拼接map<>
、 unordered_map<>
、 set<>
和unordered_set<>
字符串的非常量.data()
。
非成員std::size
、 std::empty
、 std::data
std::begin
/ end
emplace
系列函數現在返回對創建對象的引用。
unique_ptr<T[]>
修復和其他unique_ptr
調整。weak_from_this
和一些固定到共享的std
數據類型改進:C++17 庫基於C11 而不是 C99
為未來的標准庫保留std[0-9]+
std
實現中已經公開的實用程序代碼std::clamp()
std::clamp( a, b, c ) == std::max( b, std::min( a, c ) )
大致gcd
和lcm
std::uncaught_exceptions
std::as_const
std::bool_constant
_v
模板變量std::void_t<T>
std::owner_less<void>
std::less<void>
,但用於基於內容排序的智能指針std::chrono
波蘭語std::conjunction
, std::disjunction
, std::negation
暴露std::not_fn
std
noexcept 的規則std::less
。<codecvt>
memory_order_consume
result_of
,替換為invoke_result
shared_ptr::unique
,它不是很線程安全Isocpp.org 擁有自 C++14 以來的獨立變更列表; 它已被部分掠奪。
自然地,TS 工作並行繼續,因此有些 TS 還不夠成熟,必須等待下一次迭代。 下一次迭代的目標是之前計划的 C++20,而不是一些傳言暗示的 C++19。 已避免使用 C++1O。
從這個 reddit 帖子和這個 reddit 帖子中獲取的初始列表,通過谷歌搜索或從上面的 isocpp.org 頁面添加了鏈接。
從SD-6功能測試列表中掠奪的其他條目。
clang 的功能列表和庫功能列表即將被掠奪。 這似乎不可靠,因為它是 C++1z,而不是 C++17。
這些幻燈片在其他地方缺少一些功能。
雖然沒有詢問“刪除了什么”,但這里列出了在 C++17 中從 C++ 中刪除的一些內容((大部分?)以前已棄用):
register
,保留供將來使用的關鍵字bool b; ++b;
<functional>
東西, random_shuffle
std::function
分配器有改寫。 我不確定這些是否對代碼有任何影響,或者它們是否只是標准中的清理:
P0505R0 (constexpr 計時)
P0418R2 (原子調整)
P0512R0 (模板參數推導調整)
P0490R0 (結構化綁定調整)
P0513R0 (更改為std::hash
)
P0502R0 (並行異常)
P0509R1 (更新異常處理限制)
P0012R1 (使異常規范成為類型系統的一部分)
P0510R0 (變體限制)
P0504R0 (可選/變體/任何標簽)
P0497R0 (共享 ptr 調整)
P0508R0 (結構化綁定節點句柄)
P0521R0 (共享指針使用計數和唯一更改?)
https://isocpp.org/files/papers/p0636r0.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.