Tabel 4 (Kata Kunci) di N3936 (C ++ 14):
alignas continue friend register true
alignof decltype goto reinterpret_cast try
asm default if return typedef
auto delete inline short typeid
bool do int signed typename
break double long sizeof union
case dynamic_cast mutable static unsigned
catch else namespace static_assert using
char enum new static_cast virtual
char16_t explicit noexcept struct void
char32_t export nullptr switch volatile
class extern operator template wchar_t
const false private this while
constexpr float protected thread_local
const_cast for public throw
Tabel 4 di N3337 (C ++ 11):
alignas continue friend register true
alignof decltype goto reinterpret_cast try
asm default if return typedef
auto delete inline short typeid
bool do int signed typename
break double long sizeof union
case dynamic_cast mutable static unsigned
catch else namespace static_assert using
char enum new static_cast virtual
char16_t explicit noexcept struct void
char32_t export nullptr switch volatile
class extern operator template wchar_t
const false private this while
constexpr float protected thread_local
const_cast for public throw
... yang merupakan cara bertele-tele untuk mengatakan "tidak".
( override
dan final
merupakan "pengidentifikasi dengan arti khusus" dan didaftar di Tabel 3; and
dll. adalah "representasi alternatif ... untuk operator dan punctuator tertentu" dan tercantum dalam Tabel 5. Tidak ada tabel yang diubah antara C ++ 11 dan C ++ 14.)
register
kata kunci masih berguna atau digunakan dalam kode C ++ 11 baru?Saya memposting jawaban ini demi memberikan alat untuk menemukan jawaban atas pertanyaan serupa.
Draf standar saat ini disimpan di repositori GitHub publik. Artinya, Anda dapat mengajukan pertanyaan ini ke GitHub sendiri!
Tabel kata kunci ada di file
source/lex.tex
. Jika Anda melakukan kesalahan, kami dapat menemukan bahwa perubahan terakhir pada tabel kata kunci terjadi pada Agustus 2011 (sebenarnya ini adalah komit pertama: tabel itu tidak berubah sejak repo ditayangkan sekitar waktu C ++ 11 sedang diselesaikan).Alternatifnya, kami dapat meminta GitHub untuk membandingkan dua draf yang dikirim untuk pemungutan suara untuk kedua versi standar: N3337 dan N3936. Perbedaan di antara keduanya menunjukkan bahwa perubahan ke
lex.tex
tidak mengubah apa pun dalam tabel kata kunci.sumber
Tidak ada kata kunci baru yang akan ditambahkan dengan C ++ 14. Ini tidak mengherankan karena C ++ 14 dimaksudkan sebagai peningkatan kecil ke C ++ 11 terutama yang terlibat dalam pembersihan bug dan membuat perbaikan kecil dan berdampak rendah. Perubahan besar berikutnya kemungkinan besar menjadi C ++ '17' di mana saya mengharapkan kata kunci baru sekali lagi.
Saya pikir perlu dipertimbangkan mengapa panitia menghindar dari menambahkan kata kunci baru (dan secara kebetulan mengapa Anda salah memasukkannya ke
auto
dalam daftar Anda). Masalah utama dengan kata kunci baru adalah bahwa di C ++ Anda tidak dapat menggunakan kata kunci sebagai pengenal yang berarti menambahkan kata kunci baru akan merusak kode yang ada. Repurposingauto
, maka, tidak melanggar aturan mereka karena tidak ada kode yang ada bisa menggunakanauto
sebagai identifier pula .Jadi untuk menerima kata kunci baru, perlu ada pembenaran yang melebihi biaya potensi bentrokan dengan kode yang ada dan tidak ada cara yang masuk akal untuk menerapkan hal yang sama tanpa kata kunci baru. Dalam kasus C ++ 11, panitia menerima beberapa proposal yang membutuhkan kata kunci baru karena mereka merasa manfaatnya lebih besar daripada biayanya bukan karena mereka tidak benci untuk menambahkan kata kunci baru.
Itu juga mengapa, jika Anda melihat ke bawah daftar yang Anda berikan, masing-masing adalah kata kunci gabungan karena mengurangi kemungkinan bentrok dengan pengenal yang ada.
sumber