Pertanyaan Apa sajakah fitur baru di C ++ 17?


C ++ 17 sekarang fitur lengkap, jadi tidak mungkin mengalami perubahan besar. Ratusan proposal diajukan untuk C ++ 17.

Manakah dari fitur tersebut yang ditambahkan ke C ++ dalam C ++ 17?

Saat menggunakan kompiler C ++ yang mendukung "C ++ 1z", fitur mana yang akan tersedia saat pembaruan kompiler ke C ++ 17?


831
2018-06-27 18:06


asal


Jawaban:


Fitur bahasa:

Template dan Kode Umum

Lambda

Atribut

Pembersihan sintaks

Cleaner multi-return dan kontrol aliran

  • Binding terstruktur

    • Pada dasarnya, kelas satu std::tie dengan auto
    • Contoh:
      • const auto [it, inserted] = map.insert( {"foo", bar} );
      • Menciptakan variabel it dan inserted dengan tipe disimpulkan dari pair bahwa map::insert kembali.
    • Bekerja dengan tuple / pair-likes & std::arrays dan struct relatif datar
    • Sebenarnya bernama binding terstruktur dalam standar
  • if (init; condition) dan switch (init; condition)

    • if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
    • Memperpanjang if(decl) untuk kasus di mana decl tidak konvertibel-ke-bool.
  • Generalisasi berbasis rentang untuk loop

    • Tampaknya sebagian besar mendukung sentinel, atau mengakhiri iterator yang bukan tipe yang sama dengan memulai iterator, yang membantu dengan loop yang diakhiri null dan sejenisnya.
  • jika constexpr

    • Banyak fitur yang diminta untuk menyederhanakan kode yang hampir generik.

Lain-lain

Penambahan perpustakaan:

Tipe data

  • std::variant<Ts...>

    • Hampir selalu kosong terakhir yang saya periksa?
    • Jenis serikat bertanda
    • {awesome | berguna}
  • std::optional

    • Mungkin memegang salah satu dari sesuatu
    • Sangat bermanfaat
  • std::any

    • Memegang salah satu dari apa pun (yang dapat ditagih)
  • std::string_view

    • std::string seperti referensi-ke-karakter-array atau substring
    • Jangan pernah mengambil string const& lagi. Juga dapat membuat parsing bajillion lebih cepat.
    • "hello world"sv
    • constexpr char_traits
  • std::byte lebih dari yang bisa mereka kunyah.

    • Baik integer maupun karakter, hanya data

Meminjam barang

File System TS v1

Algoritme baru

  • for_each_n

  • reduce

  • transform_reduce

  • exclusive_scan

  • inclusive_scan

  • transform_exclusive_scan

  • transform_inclusive_scan

  • Ditambahkan untuk tujuan threading, diekspos bahkan jika Anda tidak menggunakannya berulir

Threading

(bagian dari) Fundamental Perpustakaan TS v1 tidak tercakup di atas atau di bawah

Perbaikan Penampung

Penunjuk pintar berubah

Lain std perbaikan datatype:

Lain-lain

Sifat

Tidak berlaku lagi

Isocpp.org memiliki memiliki daftar perubahan independen sejak C ++ 14; telah sebagian dijarah.

Secara alami, TS bekerja 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 laman isocpp.org di atas.

Entri tambahan dijarah dari SD-6 daftar uji-fitur.

daftar fitur clang dan daftar fitur pustaka selanjutnya akan 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 diminta, di sini adalah daftar singkat dari beberapa hal ((sebagian besar?) Sebelumnya tidak berlaku lagi) yang dihapus dalam C ++ 17 dari C ++:

Dihapus:

Ada reklame. Saya tidak yakin apakah ini berdampak pada kode, atau jika mereka hanya pembersihan dalam standar:

Makalah belum diintegrasikan ke atas:

  • P0505R0 (constexpr chrono)

  • P0418R2 (tweak atom)

  • P0512R0 (tweak pengurangan argumen template)

  • P0490R0 (tweak mengikat terstruktur)

  • P0513R0 (berubah menjadi std::hash)

  • P0502R0 (pengecualian paralel)

  • P0509R1 (memperbarui pembatasan penanganan eksepsi)

  • P0012R1 (Buat spesifikasi pengecualian menjadi bagian dari sistem jenis)

  • P0510R0 (pembatasan varian)

  • P0504R0 (tag untuk opsional / varian / apa saja)

  • P0497R0 (shared ptr tweaks)

  • P0508R0 (Binding simpul terstruktur menangani)

  • P0521R0 (hitungan penggunaan pointer bersama dan perubahan unik?)

Perubahan spesifikasi:

Referensi lebih lanjut:


1051
2018-06-27 18:06