informasi kontak saya
Surat[email protected]
2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
(1) Derivasi otomatis tipe otomatis
auto secara otomatis menyimpulkan jenis variabel
auto tidak mewakili tipe sebenarnya, itu hanya pengganti untuk deklarasi tipe
Otomatis tidak mahakuasa dan dapat dideduksi dalam skenario apa pun. Variabel yang dideklarasikan menggunakan auto harus diinisialisasi agar kompiler dapat menyimpulkan tipe sebenarnya dan mengubah auto menjadi tipe sebenarnya pada waktu kompilasi.
Jika variabel bukan pointer atau referensi, maka hasil derivasi tidak akan menggunakan kata kunci const dan volatil; jika variabel berupa pointer atau referensi, maka hasil derivasi akan mempertahankan kata kunci const dan volatil.
Skenario di mana auto tidak dapat digunakan:
1.auto tidak dapat digunakan sebagai parameter fungsi, karena menggunakan auto sebagai parameter formal sama dengan tidak menginisialisasi variabel, dan auto tidak dapat diekspor;
2. Tidak dapat digunakan untuk menginisialisasi variabel anggota non-statis suatu kelas, karena variabel anggota non-statis adalah milik objek, dan jenis objek tidak diketahui sampai objek tersebut dibuat;
3. Anda tidak dapat menggunakan kata kunci auto untuk mendefinisikan array;
4. Otomatis tidak dapat digunakan untuk mendapatkan parameter templat;
Skenario penggunaan yang disarankan untuk otomatis:
1. Digunakan untuk melintasi kontainer STL;
2. Digunakan untuk pemrograman generik;
(2) derivasi tipe decltype
Terkadang Anda tidak memerlukan atau tidak dapat mendefinisikan variabel, tetapi Anda ingin mendapatkan tipe tertentu. Anda dapat menggunakan decltype. decltype menyimpulkan tipe ekspresi selama kompilasi, seperti: int x=18; ;Artinya, simpulkan jenis a sampai x
Aturan derivasi:
1. Ekspresinya adalah variabel biasa, ekspresi biasa, atau ekspresi kelas waktu, dan tipe yang dideduksi menggunakan decltype konsisten dengan tipe ekspresi;
2. Ekspresinya adalah sebuah fungsi, dan tipe yang disimpulkan menggunakan decltype konsisten dengan nilai kembalian fungsi tersebut (jika nilai kembalian diubah dengan const, kualifikasi yang mudah menguap, kualifikasinya diabaikan);
3. Ekspresi adalah lvalue atau dibungkus dengan (), dan decltype digunakan untuk menyimpulkan referensi ke tipe ekspresi (jika nilai kembalian diubah dengan kualifikasi const atau volatil, kualifikasi diabaikan);
Skenario aplikasi decltype:
1. Banyak digunakan dalam pemrograman generik, karena ada banyak jenis yang tidak pasti dalam pemrograman generik;
final digunakan untuk membatasi kelas tertentu agar tidak diwariskan atau fungsi virtual tertentu agar tidak diganti.
Ketika final memodifikasi suatu fungsi, Anda hanya dapat memodifikasi fungsi virtual, dan kata kunci final harus ditempatkan setelah kelas atau fungsi. Ketika fungsi virtual dimodifikasi dengan final, hal ini dapat mencegah subkelas mengambil alih fungsi virtual kelas induk.
Ketika final memodifikasi suatu kelas, tuliskan final setelah nama kelas, yang menunjukkan bahwa kelas ini tidak boleh lagi diwariskan, artinya kelas ini tidak lagi memiliki kelas turunan.
Peran awal: digunakan untuk mendeklarasikan namespace. Menggunakan namespace dapat mencegah konflik penamaan subkelas pengguna dengan nama yang sama dengan kelas induk yang tersembunyi;
Fungsi baru: mendefinisikan alias suatu tipe. Perhatikan bahwa penggunaan sebenarnya hanya memberikan alias pada tipe aslinya, daripada mendefinisikan tipe baru. Cara menggunakan: menggunakan tipe baru = tipe lama, seperti: menggunakan my_int = int;
Menggunakan penggunaan alih-alih typedef untuk mendefinisikan penunjuk fungsi membuat kode lebih mudah dibaca. Pada awalnya, typedef digunakan untuk mendefinisikan penunjuk fungsi, seperti: typedef int (func)(int, string);Gunakan definisi penggunaan sebagai gantinya: penggunaan func = int()(int, string);
Menggunakan dapat menentukan alias untuk templat, tetapi typedef tidak bisa
Penyusun C awal menafsirkan dua tanda kurung siku sebagai operator shift kanan
Di antara fitur-fitur baru, aturan penguraian kompiler telah ditingkatkan untuk mengurai beberapa tanda kurung siku ke dalam terminator parameter templat sebanyak mungkin.
Override digunakan untuk memastikan bahwa fungsi yang akan ditimpa di kelas turunan memiliki tanda tangan yang sama dengan fungsi virtual terkait dari kelas dasar, dan juga dengan jelas menunjukkan bahwa fungsi kelas dasar akan ditimpa.
Override ditulis setelah fungsi, secara eksplisit menyatakan bahwa fungsi tersebut diganti, dan kompiler akan memeriksa jenis fungsi dan fungsi virtual dari kelas induk.
Tulis jenis nilai kembalian fungsi setelah isi deklarasi fungsi, fungsi otomatis (parameter 1, parameter 2,...) -