Fitur bahasa:
Template dan Kode Generik
Lambda
Atribut
Pembersihan sintaksis
Pembersih multi-return dan kontrol aliran yang lebih bersih
Lain-lain
Literal float point heksadesimal
Alokasi memori dinamis untuk data yang terlalu selaras
Salinan salinan dijamin
- Akhirnya!
- Tidak dalam semua kasus, tetapi bedakan sintaksis di mana Anda "hanya menciptakan sesuatu" yang disebut elision, dari "elision asli".
Memperbaiki urutan evaluasi untuk (beberapa) ekspresi dengan beberapa modifikasi
- Tidak termasuk argumen fungsi, tetapi evaluasi argumen fungsi interleaving sekarang dilarang
- Membuat banyak kode rusak sebagian besar, dan membuat
.then
pekerjaan di masa depan
Daftar langsung-inisialisasi enum
Maju jaminan kemajuan (FPG) (juga, FPG untuk algoritma paralel )
- Saya pikir ini mengatakan "implementasi mungkin tidak menghentikan utas selamanya"?
u8'U', u8'T', u8'F', u8'8'
literal karakter (string sudah ada)
"noexcept" dalam sistem tipe
__has_include
- Uji apakah file header menyertakan kesalahan
- membuat migrasi dari percobaan ke std hampir mulus
Array perbaikan konversi pointer
perbaikan konstruktor bawaan untuk beberapa kasus sudut (lihat P0136R0 untuk contoh perubahan perilaku)
inisialisasi agregat dengan warisan .
std::launder
, ketik punning, dll
Tambahan perpustakaan:
Tipe data
Meminta hal-hal
std::invoke
- Panggil semua callable (fungsi pointer, fungsi, anggota pointer) dengan satu sintaks. Dari konsep INVOKE standar.
std::apply
- Mengambil fungsi-seperti dan tuple, dan membongkar tuple ke dalam panggilan.
std::make_from_tuple
, std::apply
diterapkan pada konstruksi objek
is_invocable
, is_invocable_r
,invoke_result
Threading
Perbaikan Kontainer
Penunjuk pintar berubah
std
Peningkatan tipe data lainnya :
Lain-lain
Pustaka C ++ 17 didasarkan pada C11 dan bukan C99
Dicadangkan std[0-9]+
untuk perpustakaan standar masa depan
destroy(_at|_n)
, uninitialized_move(_n)
, uninitialized_value_construct(_n)
,uninitialized_default_construct(_n)
- kode utilitas sudah di sebagian besar
std
implementasi terbuka
- Fungsi matematika khusus
- para ilmuwan mungkin menyukainya
std::clamp()
std::clamp( a, b, c ) == std::max( b, std::min( a, c ) )
kurang lebih
gcd
dan lcm
std::uncaught_exceptions
- Wajib jika Anda hanya ingin membuang jika aman dari destruktor
std::as_const
std::bool_constant
- Sejumlah
_v
variabel template
std::void_t<T>
- Sangat berguna saat menulis template
std::owner_less<void>
- suka
std::less<void>
, tetapi untuk pointer pintar untuk mengurutkan berdasarkan konten
std::chrono
Polandia
std::conjunction
, std::disjunction
,std::negation
Terkena
std::not_fn
- Aturan untuk noexcept di dalam
std
- std :: is_contiguous_layout , berguna untuk hashing yang efisien
- std :: to_chars / std :: from_chars , kinerja tinggi, konversi nomor agnostik lokal; akhirnya cara untuk membuat serial / deserialize ke format yang dapat dibaca manusia (JSON & co)
std :: default_order , tipuan berakhir std::less
. ( istirahat ABI dari beberapa kompiler karena nama mangling, dihapus.)
Sifat
Usang
Isocpp.org memiliki daftar perubahan independen sejak C ++ 14; sebagian telah dijarah.
Secara alami pekerjaan TS berlanjut secara paralel, jadi ada beberapa TS yang tidak cukup matang yang harus menunggu iterasi berikutnya. Target untuk iterasi berikutnya adalah C ++ 20 seperti yang direncanakan sebelumnya, bukan C ++ 19 karena beberapa rumor tersirat. C ++ 1O telah dihindari.
Daftar awal diambil dari posting reddit ini dan posting reddit ini , dengan tautan yang ditambahkan melalui googling atau dari halaman isocpp.org di atas.
Entri tambahan dijarah dari daftar uji fitur SD-6 .
Daftar fitur dentang dan daftar fitur pustaka selanjutnya dijarah. Ini tampaknya tidak dapat diandalkan, karena C ++ 1z, bukan C ++ 17.
slide ini memiliki beberapa fitur yang hilang di tempat lain.
Sementara "apa yang dihapus" tidak ditanyakan, berikut adalah daftar singkat beberapa hal ((kebanyakan?) Yang sudah usang sebelumnya yang dihapus dalam C ++ 17 dari C ++:
Dihapus:
Ada rewordings. Saya tidak yakin apakah ini berdampak pada kode, atau apakah itu hanya pembersihan dalam standar:
Makalah belum terintegrasi ke dalam:
P0505R0 (constexpr chrono)
P0418R2 (tweak atom)
P0512R0 (pengurangan templat argumen argumen)
P0490R0 (tweak mengikat terstruktur)
P0513R0 (perubahan ke std::hash
)
P0502R0 (pengecualian paralel)
P0509R1 (memperbarui pembatasan penanganan pengecualian)
P0012R1 (jadikan spesifikasi pengecualian sebagai bagian dari sistem tipe)
P0510R0 (pembatasan varian)
P0504R0 (tag untuk opsional / varian / apa saja)
P0497R0 (berbagi ptr tweak)
P0508R0 (gagang simpul binding terstruktur)
P0521R0 (pointer menggunakan hitungan count dan perubahan unik?)
Perubahan spesifikasi:
Referensi lebih lanjut: