apa perbedaan antara b dan c?
c memiliki initializer konstanta waktu kompilasi, sedangkan b tidak. Objek const dengan initializer konstanta waktu kompilasi itu sendiri merupakan nilai konstanta waktu kompilasi.
Karena saya dapat mendefinisikan satu lentry dari sebuah arry menggunakan konstanta, jadi mengapa ini tidak berhasil?
Bukan sembarang konstanta yang bisa dilakukan. const
qualifier mengimplikasikan runtime constness (yaitu nilai dapat ditentukan pada saat runtime tetapi tidak akan berubah sepanjang umur objek). Hanya nilai konstanta waktu kompilasi yang dapat digunakan sebagai ukuran array.
Istilah "konstan" benar-benar ambigu, dan kata kunci
const
tersebut menyesatkan.const
berarti: "jangan izinkan nilai objek ini tidak akan berubah setelah inisialisasi". Itu tidak berarti "kompilasi waktu konstan". Nilai awalnya dapat (dan biasanya memang) masih berasal dari sumber runtime.Anda memerlukan konstanta waktu kompilasi untuk batas array.
Kadang-kadang mungkin untuk memiliki objek bernama
foo
konstanta waktu kompilasi, jika ituconst
dan itu diinisialisasi dari ekspresi konstan, seperti literal atauconstexpr
benda. Itulah masalahnyac
; tidak demikian halnya untukb
.sumber