Rumah > pembangunan bahagian belakang > C++ > Apakah ciri bahasa utama, penambahan perpustakaan dan elemen yang tidak digunakan lagi yang diperkenalkan dalam C 17?

Apakah ciri bahasa utama, penambahan perpustakaan dan elemen yang tidak digunakan lagi yang diperkenalkan dalam C 17?

Mary-Kate Olsen
Lepaskan: 2024-12-08 11:10:19
asal
515 orang telah melayarinya

What are the key language features, library additions, and deprecated elements introduced in C  17?

C 17 Ciri

C 17 memperkenalkan pelbagai ciri baharu kepada bahasa, dengan ketara mengembangkan keupayaannya dan meningkatkan kebolehgunaannya. Penambahan ini merangkumi pelbagai aspek bahasa, daripada penambahbaikan templat dan peningkatan lambda kepada penambahan perpustakaan dan elemen yang tidak digunakan lagi.

Ciri Bahasa

Templat dan Kod Generik:

  • Potongan Hujah Templat untuk Kelas Templat: Pembina kini boleh menyimpulkan hujah templat, serupa dengan fungsi.
  • Argumen Templat: Mewakili nilai mana-mana jenis hujah templat bukan jenis.
  • Menyemak Argumen Templat Bukan Jenis: Beberapa pembetulan dan semakan telah dibuat kepada templat bukan jenis hujah.

Lambda:

  • Constexpr Lambdas: Lambda kini boleh ditanda secara eksplisit sebagai constexpr jika mereka memenuhi keperluan tertentu .
  • Merakam perkara ini Lambdas: Lambdas kini boleh menangkap penunjuk ini, membenarkan akses kepada pembolehubah dan kaedah ahli.

Atribut:

  • Atribut Baharu: Atribut seperti [[fallthrough]], [[nodiscard]] dan [[maybe_unused]] telah diperkenalkan untuk meningkatkan kejelasan dan kebolehbacaan kod.
  • Atribut pada Ruang Nama dan Pembanci: Atribut kini boleh digunakan pada ruang nama dan pembanci menggunakan [[atribut]].

Sintaks Pembersihan:

  • Pembolehubah Sebaris: Pembolehubah kini boleh diisytiharkan sebaris, membenarkan pengkompil menyelaraskan takrifannya.
  • Pengisytiharan Ruang Nama Dipermudahkan : Sintaks ruang nama A::B telah diperkenalkan untuk ruang nama ringkas pengisytiharan.
  • static_assert yang dipermudah: pernyataan static_assert kini boleh digunakan tanpa hujah rentetan.

Bersihkan Pelbagai Pulangan dan Kawalan Aliran:

  • Berstruktur Pengikatan: Pengikatan berstruktur membolehkan pembongkaran tupel dan struktur data lain yang lebih mudah dalam pengisytiharan.
  • Pernyataan Bersyarat dengan Permulaan: jika (init; condition) dan suis (init; condition) memberikan lebih fleksibiliti dalam pernyataan bersyarat.
  • Generalizing Julat-Based For Loops: Julat-based untuk gelung kini menyokong sentinel (pengulang akhir) yang berbeza daripada iterator permulaan.
  • jika constexpr: if constexpr membenarkan kompilasi bersyarat berdasarkan pemalar masa kompilasi.

Lain-lain:

  • Harta Terapung Heksadesimal: Literal titik terapung kini boleh dinyatakan dalam format perenambelasan.
  • Peruntukan Memori Dinamik untuk Data Terlebih Jajaran: Sokongan yang dipertingkatkan untuk peruntukan memori dinamik yang lebih sejajar data.
  • Penyingkiran Salinan Dijamin: Senario tertentu di mana penyingkiran salinan tidak dijamin kini mempunyai jaminan yang jelas.
  • Tertib Penilaian yang Lebih Baik: Peraturan tertib penilaian untuk ungkapan tertentu telah disemak untuk lebih jelas tingkah laku.

Tambahan Perpustakaan

Jenis Data:

  • std::variant: Polimorfik jenis yang boleh memegang nilai satu daripada pelbagai alternatif jenis.
  • std::optional: Mewakili nilai pilihan yang mungkin mengandungi nilai atau mungkin tidak.
  • std::any: A bekas jenis dipadamkan yang boleh menyimpan nilai sewenang-wenangnya taip.
  • std::string_view: Rujukan kepada jujukan aksara, serupa dengan const char*.
  • std::bait: A jenis untuk mewakili mentah bait.

Utiliti:

  • std::invoke: Mendapat panggilan dengan argumen yang diberikan, menyokong pelbagai jenis boleh panggil.
  • std::apply: Membongkar tuple dan menyerahkan elemennya sebagai argumen kepada boleh panggil.
  • std::invoke_result dan Konsep Berkaitan: Konsep dan jenis untuk menentukan kesahihan dan hasil daripada memanggil boleh dipanggil dengan argumen yang diberikan.

Perpustakaan Sistem Fail (TS v1):

  • Kelas dan fungsi untuk bekerja dengan sistem fail, direktori dan fail.

Baharu Algoritma:

  • untuk_setiap_n
  • mengurangkan
  • transform_reduce
  • eksklusif_scan
  • inklusif_scan
  • transform_exclusive_scan
  • transform_inclusive_scan

Threading:

  • std::shared_mutex: Mutex kongsi yang membenarkan berbilang pembaca tetapi hanya seorang penulis.
  • atomic::is_always_lockfree: Menunjukkan sama ada jenis atom bebas kunci dalam semua kes.
  • scoped_lock:: Mengunci berbilang mutexes serentak, memudahkan penguncian dan buka kunci.

(Sebahagian) Perpustakaan Asas Perpustakaan (TS v1):

    Fungsi untuk melakukan carian dan bekerja dengan polimorfik pengagih.

Penambahbaikan Bekas:

  • try_emplace dan insert_or_assign: Kaedah pemasukan bekas yang dipertingkatkan untuk mengendalikan
  • Penyambungan untuk Bekas:
  • Mengalihkan nod antara bekas dengan cekap.
Perubahan Penunjuk Pintar:

Pembetulan dan tweak kepada std::unique_ptr dan pintar lain petunjuk.
Penambahbaikan Tambahan:

  • Trivially Copyable std::reference_wrapper: Meningkatkan prestasi dalam kes tertentu.
  • Pustaka C11 yang dikemas kini: Pustaka standard C 17 adalah berdasarkan C11 , menyediakan keserasian dengan moden sistem.
  • Elemen Ditamatkan: Pelbagai elemen daripada versi piawai C sebelumnya telah ditamatkan.

Ciri dalam C 1z (Dijangka untuk C 17)* *

Untuk menentukan ciri daripada draf kerja C 1z yang akan tersedia dalam C 17 penyusun, adalah disyorkan untuk merujuk dokumentasi dan nota keluaran penyusun individu. Tidak semua ciri daripada C 1z semestinya akan dilaksanakan dalam setiap pengkompil C 17.

Sila ambil perhatian bahawa tidak semua perubahan atau ciri telah disebut dalam ringkasan ini. Untuk senarai lengkap, sila rujuk dokumen standard C 17 atau sumber lain yang bereputasi.

Atas ialah kandungan terperinci Apakah ciri bahasa utama, penambahan perpustakaan dan elemen yang tidak digunakan lagi yang diperkenalkan dalam C 17?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan