const int *: Penunjuk itu sendiri boleh berubah, tetapi nilai yang ditunjuk adalah tidak berubah
int * const: Penunjuk itu sendiri tidak boleh diubah dan nilai yang ditunjuk boleh berubah
Menukar const int * -> int * const akan melaporkan ralat
Penukaran int * const -> const int * boleh dilakukan
Semantik bercakap, ia lebih mudah untuk difahami, tetapi dari sudut pandangan formal, kedua-duanya mempunyai kuantiti yang tidak berubah, jadi mengapa satu arah boleh dilaksanakan semasa penukaran, tetapi bukan yang lain? Selepas memikirkannya, mungkin kerana petunjuk dan nilai tidak berada pada tahap yang sama, tetapi saya tidak tahu bagaimana untuk menjelaskannya?
Anggap bahawa apa yang dibincangkan di sini ialah penukaran tersirat (serupa dengan static_cast):
Konst asas mematuhi penukaran kelayakan: jenis sasaran mestilah lebih layak. Iaitu, const hanya boleh lebih tetapi tidak kurang.
Peraturan const peringkat atas lebih rumit Untuk jenis kelas, sama ada ia boleh ditukar bergantung pada pembina penukaran dan fungsi penukaran. Untuk jenis bukan kelas, tiada perkara seperti penukaran const peringkat atas. Penukaran standard Klausa 4 tidak mengatakan apa-apa tentang kebolehan peringkat atasan.
Di sini kita membincangkan beberapa situasi yang melibatkan const peringkat atasan:
Ekspresi:
Tugasan:
Permulaan:
Maksudnya, apabila yang diperlukan ialah prvalue, tiada const prvalue. Mengenai nilai gl, terdapat konvensyen berikut:
.Perenggan ini menetapkan kategori nilai selepas penukaran tersirat. Apabila hasil penukaran tersirat ialah prvalue, tiada const dan apabila hasilnya adalah glvalue, jenis sasaran penukaran mestilah rujukan lvalue atau rujukan rvalue. Dalam kes ini, jika pemulaan berikut bertahan, ia boleh ditukar:
T &t = e;
T &&t = e;
const T &t = e;
const T &&t = e;
serasi rujukan mengehadkan sama ada ia boleh dimulakan. Peraturan di sini adalah serupa dengan peraturan penukaran kelayakan. Selain itu, const ini sudah pun menjadi const yang mendasari.
PS: Terdapat nota kaki pada penukaran kelayakan: "Peraturan ini memastikan bahawa keselamatan const dipelihara oleh penukaran.". Semua penukaran const tersirat, sama ada yang dipersetujui atau khayalan, adalah baik asalkan boleh memastikan keselamatan const. Jika penukaran const memastikan keselamatan const, tetapi tidak boleh dilaksanakan kerana ia melanggar beberapa syarat lain, maka ini mungkin pil bahasa. kelakar