WikiDer > C ++ 17
| C ++ tilini qayta ko'rib chiqish | 
|---|
| C ++ 98 • C ++ 03 • C ++ 11 • C ++ 14 • C ++ 17 • C ++ 20 • C ++ 23 | 
C ++ 17 ning qayta ko'rib chiqilishi ISO / IEC 14882 uchun standart C ++ dasturlash tili.
Tarix
C ++ standartlari qo'mitasi 3 yillik chiqish tsiklini o'rnatmasdan oldin, C ++ 17 ning chiqish sanasi noaniq edi. Shu vaqt ichida C ++ 17 versiyasi ham chaqirildi C ++ 1z, uchun C ++ 0x yoki C ++ 1x dan keyin C ++ 11 va C ++ 1y uchun C ++ 14. C ++ 17 spetsifikatsiyasi 2017 yil mart oyida Xalqaro standart (DIS) loyihasi bosqichiga yetdi.[1][2] Ushbu DIS bir ovozdan ma'qullandi, faqat tahririyat sharhlari bilan,[3] va yakuniy standart 2017 yil dekabr oyida nashr etilgan.[4] C ++ ga ozgina o'zgartirishlar kiritildi Standart shablon kutubxonasibo'lsa-da, ba'zilari algoritmlar yilda The <algorithm> sarlavha aniq qo'llab-quvvatlandi parallellashtirish va ba'zilari sintaktik yaxshilanishlar amalga oshirildi.
Olib tashlandi
C ++ versiyasini qayta ko'rib chiqish nafaqat yangi xususiyatlarni qo'shdi, balki bir nechtasini ham olib tashladi.
- Olib tashlash trigraflar.[5][6]
 - Dan eskirgan ba'zi turdagi va funktsiyalarni olib tashlash standart kutubxona, shu jumladan 
std :: auto_ptr,std :: random_shuffleva eski funktsiya adapterlari.[7][8] Bu kabi takomillashtirilgan imkoniyatlar C ++ 11 da almashtirildistd :: noyob_ptr,std :: shuffle,std :: bog'lashva lambdalar. - Kalit so'zdan (ilgari eskirgan) foydalanishni olib tashlash 
ro'yxatdan o'tishsaqlash sinfining spetsifikatori sifatida.[9] Ushbu kalit so'z hozirda saqlab qo'yilgan va foydalanilmagan. 
Yangi xususiyatlar
C ++ 17 ko'plab yangi xususiyatlarni taqdim etdi. Quyidagi ro'yxatlar to'liq bo'lmasligi mumkin.
Til
- Matnli xabarni tayyorlash 
statik_assertixtiyoriy[10] - Ruxsat berish 
yozuv nomi(alternativa sifatidasinf) shablon shablon parametrida[11] - Uchun yangi qoidalar 
avtomatikbraced-init-listdan chiqarib tashlash[12][7] - Ichki nom maydoni ta'riflari, masalan, 
ism maydoni X::Y { … }o'rnigaism maydoni X { ism maydoni Y { … } }[7][13] - Uchun atributlarga ruxsat berish ism maydonlari va sanoqchilar[14][15]
 - Yangi standart atributlar 
[[qulash]],[[balki_foydalanmagan]]va[[nodiskard]][16] - UTF-8 (
u8) belgilar literallari[14][17] (UTF-8 magistral literallari shu vaqtdan beri mavjud C ++ 11; C ++ 17 bir xil bayt bilan cheklanganligi sababli, ular mos keladigan belgilar literallarini doimiylik uchun qo'shib qo'yadi ASCII) - Hexadecimal suzuvchi nuqta adabiyotshunoslar[18][19]
 - Dan foydalanish 
avtomatikturi bo'lmagan shablon parametrining turi sifatida[20] - Shablon bo'lmagan barcha argumentlar uchun doimiy baho[14][21]
 - Uchun katlama iboralar, uchun variadic shablonlari[14][22]
 - Kompilyatsiya vaqtidagi statik 
agarshakl bilanagar constexpr(ifoda)[23] - Tuzilgan majburiy deklaratsiyalar, ruxsat berish 
avtomatik [a, b] = getTwoReturnValues();[24] - Initsializatorlar 
agarvaalmashtirishbayonotlar[25] - nusxalash-boshlash va turdagi ob'ektlarni to'g'ridan-to'g'ri boshlash 
Tturdagi iboralardanT(yuqori darajadagi cv-saralashlarni e'tiborsiz qoldirish) konstruktorlarning qiymat ifodasidan ko'chirilishiga yoki ko'chirilishiga olib kelmaydi. Qarang nusxa ko'chirish qo'shimcha ma'lumot olish uchun. - Haddan tashqari moslashtirilgan xotira ajratish bo'yicha ba'zi kengaytmalar[26]
 - Sinf shablonini argumentlarni chiqarib tashlash (CTAD), konstruktorlarni chiqarib tashlash bo'yicha qo'llanmalar, masalan. ruxsat berish 
std::juftlik(5.0, yolg'on)aniq konstruktor argumentlari turlarini talab qilish o'rnigastd::juftlik<ikki baravar, bool>(5.0, yolg'on)yoki qo'shimcha yordamchi shablon funktsiyasistd::make_pair(5.0, yolg'on).[27][28] - Ichki o'zgaruvchilar, bu buzilmasdan sarlavha fayllaridagi o'zgaruvchilarni aniqlashga imkon beradi bitta ta'rif qoidasi. Qoidalar samarali ravishda bir xil ichki funktsiyalar
 __has_include, sarlavha mavjudligini protsessor ko'rsatmalari tomonidan tekshirishga imkon beradi[29]- Qiymati 
__cplusplusga o'zgartirildi201703L[30] - Istisno texnik xususiyatlari funktsiya turining bir qismiga aylandi[31]
 
Kutubxona
- TS I kutubxona asoslarining ko'p qismi, shu jumladan:[32][33]
std :: string_view, belgi ketma-ketligini faqat o'qish uchun egalik qilmaydigan ma'lumotnoma yoki torli tilim[34]std :: ixtiyoriy, vakili uchun ixtiyoriy ob'ektlar, har doim ham qaytarilmaslikni qo'llab-quvvatlagan holda berilgan algoritm tomonidan qaytarilishi mumkin bo'lmagan ma'lumotlar turistd :: any, har qanday turdagi yagona qiymatlarni ushlab turish uchun
 std :: uncaught_exceptions, o'rnini bosuvchi sifatidastd :: uncaught_exceptionyilda istisno bilan ishlash[35][14]- Qo'shish funktsiyalari 
try_emplacevainsert_or_assignuchunstd :: mapvastd :: unordered_mapma'lumotlarning asosiy tarkibiy assotsiatsiyasi[36][37] - Bir xil idish kirish: 
std :: size,std :: bo'shvastd :: ma'lumotlar[37][38] - "Qo'shni" ta'rifi iteratorlar"[37][39]
 - A fayl tizimi kutubxona 
boost :: fayllar tizimi[40] - Parallel versiyalari STL algoritmlar[41]
 - Qo'shimcha matematik maxsus funktsiyalar, shu jumladan elliptik integrallar va Bessel funktsiyalari[42]
 std :: variant, a belgilangan birlashma idish[43]std :: bayt, ruxsat berish char modellashtirish niyatidagi ma'lumotlar turlari uchun almashtirilishi kerak bayt ma'lumotlar belgi o'rniga bayt sifatida[44]- Operatorning mantiqiy xususiyatlari: 
std :: birikma,std :: ajratishvastd :: inkor[45] <memory_resource>sarlavha, polimorfik xotira resurslari uchun[46]
Tuzuvchini qo'llab-quvvatlash
- GCC 8-versiyadan beri C ++ 17 til funktsiyalari uchun to'liq qo'llab-quvvatlanmoqda. [47]
 - Jiringlash 5 va undan keyin C ++ 17 ning barcha xususiyatlarini amalga oshiring.[48]
 - Visual Studio 2017 15.8 (MSVC 19.15) barcha C ++ 17-ni qo'llab-quvvatlaydi.[49][50]
 
Kutubxonani qo'llab-quvvatlash
- libstdc ++ 9.1 versiyasidan boshlab c ++ 17 (8.1 Parallelism TS holda va C11 o'rniga C99 ga ishora qiladi) to'liq qo'llab-quvvatlanadi [51]
 - libc ++ 9-versiyadan boshlab c ++ 17-ni qisman qo'llab-quvvatlaydi, qolgan qismi esa "davom etmoqda" [52]
 - 19.15 dan boshlab MSVC standart kutubxonasi "Elementary String Conversions" dan tashqari C ++ 17-ni to'liq qo'llab-quvvatlaydi va C11 o'rniga C99-ga murojaat qiladi.[53]
 
Shuningdek qarang
Adabiyotlar
- ^ "N4661 tahrirlovchining hisoboti - dasturlash tillari - C ++". 21 mart 2017 yil. Olingan 2017-03-21.
 - ^ "ISO / IEC DIS 14882: dasturlash tillari - C ++" (PDF). Arxivlandi asl nusxasi (PDF) 2017-03-25.
 - ^ Herb Sutter. "C ++ 17 rasmiy ravishda tasdiqlangan".
 - ^ "ISO / IEC 14882: 2017".
 - ^ "N3981: Trigraflarni olib tashlash ??! (Richard Smit)". 2014-05-06.
 - ^ IBM kompaniyasi C ++ 17 da Trigraph-noaniq kelajakka tayyorgarlik haqida izoh berdi, IBM qog'oz N4210, 2014-10-10. Mualliflar: Maykl Vong, Xubert Tong, Rayan Bxakta, Derek Inglis
 - ^ a b v "Mening sayohat hisobotimdagi yangilanishlar".
 - ^ "N4190: auto_ptr, random_shuffle () va eski funktsiyalarni olib tashlash (Stephan T. Lavavej)".
 - ^ "C ++ kalit so'zlari: ro'yxatdan o'tish".
 - ^ "N3928: static_assert-ni kengaytirish, v2 (Walter E. Brown)" (PDF).
 - ^ "N4051: Andoza shablon parametrida yozuv nomiga ruxsat bering (Richard Smit)".
 - ^ "N3922: braced-init-listdan avtomatik chegirma bo'yicha yangi qoidalar (Jeyms Dennett)".
 - ^ "N4230: joylashtirilgan nom maydonining ta'rifi (Robert Kavulak, Endryu Tomazos)".
 - ^ a b v d e "C ++ 17 uchun yangi asosiy til hujjatlari qabul qilindi".
 - ^ "N4266: ism maydonlari va sanoqchilar uchun atributlar (Richard Smit)".
 - ^ "N4640: Ishchi loyiha, C ++ dasturlash tili uchun standart" (PDF). 193-195 betlar.
 - ^ "N4267: u8 belgilariga oid literallarni qo'shish (Richard Smit)".
 - ^ Tomas Köppe. "C ++ uchun o'n oltinchi suzuvchi literallar".
 - ^ "N4659: Ishchi loyiha, C ++ dasturlash tili uchun standart" (PDF). §5.13.4.
 - ^ Jeyms Touton; Mayk Spertus (2016-06-23). "Shablon parametrlarini avtomatik ravishda e'lon qilish".
 - ^ "N4268: Shablonning barcha noodatiy argumentlari uchun doimiy baho berishga ruxsat berish (Richard Smit)".
 - ^ "N4295: katlamali iboralar (Endryu Satton, Richard Smit)".
 - ^ "N4659: Ishchi loyiha, C ++ dasturlash tili uchun standart" (PDF). §9.4.1.
 - ^ "N4659: Ishchi loyiha, C ++ dasturlash tili uchun standart" (PDF). §11.5.
 - ^ "Boshlovchi bilan tanlov bayonotlari".
 - ^ "Haddan tashqari tekislangan ma'lumotlar uchun dinamik xotirani taqsimlash".
 - ^ "Sinf shablonining argumentini chiqarib tashlash".
 - ^ "CppCon 2018: Timur Doumler" C ++ 17 da dars shablonini argumentini chiqarib tashlash"".
 - ^ "N4640: Ishchi loyiha, C ++ dasturlash tili uchun standart" (PDF). 431-433 betlar.
 - ^ "N4659: Ishchi loyiha, C ++ dasturlash tili uchun standart" (PDF). §19.8.
 - ^ "P0012R1: istisno texnik xususiyatlarini turdagi tizimning 5-versiyasi bo'lishi kerak".
 - ^ "C ++ 17 (R1) uchun kutubxona asoslarini V1 TS komponentlarini qabul qiling".
 - ^ "Hozirgi holat".
 - ^ "std :: basic_string_view - cppreference.com". en.cppreference.com. Olingan 2016-06-23.
 - ^ "N4259: std :: uncaught_exceptions uchun so'z (Herb Sutter)" (PDF).
 - ^ "N4279: noyob kalitli xaritalar uchun ichki interfeys yaxshilandi (Tomas Köppe)".
 - ^ a b v "C ++ 17 uchun yangi standart kutubxona hujjatlari qabul qilindi".
 - ^ "N4280: Ro'yxatdan bo'lmagan kattalik () va boshqalar (Rikkardo Markangelo)" (PDF).
 - ^ "N4284: tutashgan takrorlovchilar (Jens Maurer)".
 - ^ "Fayllar tizimiga oid kutubxonaga taklif (Beman Deyvs)".
 - ^ "Parallelism TS standartlashtirilishi kerak".
 - ^ "C ++ 17, v5 uchun matematik maxsus funktsiyalar" (PDF).
 - ^ "N4659: Ishchi loyiha, C ++ dasturlash tili uchun standart" (PDF). §23.7.
 - ^ "Bayt turini aniqlash" (PDF).
 - ^ "N4659: Ishchi loyiha, C ++ dasturlash tili uchun standart" (PDF). §23.15.8.
 - ^ "PMR (Polimorfik xotira manbalari) to'liq tavsiflangan - Niko Jozuttis".
 - ^ "GCC-da C ++ standartlarini qo'llab-quvvatlash - GNU loyihasi - Free Software Foundation (FSF)". gcc.gnu.org.
 - ^ "Clang - C ++ 17, C ++ 14, C ++ 11 va C ++ 98 holati". clang.llvm.org.
 - ^ corob-msft. "Visual C ++ tiliga muvofiqligi". docs.microsoft.com.
 - ^ "E'lon: MSVC C ++ standartiga mos keladi".
 - ^ "1-bob. Status". gcc.gnu.org.
 - ^ "libc ++ C ++ 17 holati". llvm.org.
 - ^ "E'lon: MSVC C ++ standartiga mos keladi". devblogs.microsoft.com.