Daftar Isi:
- Mengembangkan sebuah konversi UDL
- Mengembangkan tipe UDL kustom
- Menggunakan UDL khusus untuk efek samping
Video: BEFORE YOU GO TO SCHOOL, WATCH THIS || WHAT IS SCHOOL FOR? 2024
Perpustakaan Standar, ditambah dengan fitur built-in dari C ++, memberi Anda array literal yang menarik. Namun, nilai sebenarnya dari literal menjadi lebih jelas saat Anda menciptakannya sendiri.
Ada banyak kebutuhan berbeda yang dapat Anda gunakan dengan menggunakan User-Defined Literals (UDLs), namun tiga kebutuhan umum mendukung konversi data, membuat jenis kustom lebih mudah untuk bekerja dengan, dan mendapatkan efek samping yang diinginkan tanpa jumlah masalah pengkodean yang biasa.
Meskipun built-in atau Standard Library literals hadir dalam bentuk awalan dan akhiran, Anda hanya dapat membuat bentuk akhiran saat menentukan literal Anda sendiri. Selain itu, akhiran harus dimulai dengan underscore. Underscore berfungsi untuk membantu mencegah konflik dengan sufiks yang ada dan untuk memastikan pengembang lain tahu bahwa literal itu adalah bentuk kebiasaan (tidak standar).
Mengembangkan sebuah konversi UDL
Mungkin untuk merangkum konversi dalam UDL. Yang perlu Anda lakukan setelah membuat UDL semacam itu adalah memberikan akhiran yang sesuai saat menentukan konstanta untuk mendapatkan hasil yang Anda inginkan. Contoh CustomUDL01 menunjukkan teknik untuk menentukan konversi yang mengubah masukan radius ke area lingkaran dalam konstanta.
#include menggunakan namespace std; constexpr long double operator "_circ (radius ganda panjang) {radius kembali * radius * 3. 141592;} int main () {double x = 5. 0_circ; cout <<" area lingkaran adalah: "<< x << endl; return 0;}
Untuk membuat UDL, contohnya bergantung pada constexpr dengan nilai pengembalian ganda panjang dan nilai masukan, radius, double panjang. Persamaan untuk menghitung area lingkaran adalah πr 2 . Seperti yang Anda lihat, contoh melakukan perhitungan yang benar sebagai bagian dari constexpr.
Setiap kali Anda membuat UDL kustom, compiler memaksa Anda untuk menggunakan jenis konversi terbesar Apa ini berarti Anda harus menggunakan jeda panjang untuk literatur floating point dan unsigned long long untuk literal bilangan bulat Bahkan jika Anda kemudian memilih untuk menggunakan jenis yang lebih kecil, seperti yang dilakukan dalam hal ini Contoh dengan mendeklarasikan x sebagai ganda, literal itu sendiri harus menggunakan tipe kemungkinan terbesar.
Untuk mendeklarasikan UDL tipe baru, contohnya menciptakan x, yang menggunakan akhiran _circ. Kemudian output Hasilnya di layar. Ketika Anda menjalankan contoh ini, Anda melihat bahwa nilai yang benar telah ditempatkan di x, seperti yang ditunjukkan di sini:
Area lingkaran adalah: 78. 5398
Mengembangkan tipe UDL kustom
Banyak kode Anda Pertemuan bergantung pada jenis kebiasaan yang sulit untuk diikuti dan dimengerti.Membuat UDL untuk menyederhanakan kode membuat semuanya lebih jelas dan mengurangi potensi kesalahan. Contoh CustomUDL02 menunjukkan tipe kustom, operator yang digunakan untuk membuat UDL, dan juga bagaimana UDL digunakan untuk mendefinisikan literal.
#include menggunakan namespace std; struct MyType {MyType (input ganda): Nilai (Input) {} Nilai ganda;}; MyType operator "_mytype (nilai ganda panjang) {return MyType (Nilai);} int main () {auto UDLType = 145. 6_mytype; cout << uDLType. Nilai << endl; return 0;}
Agar ini teknik untuk bekerja, Anda harus membuat konstruktor untuk tipe Anda yang menerima jumlah masukan yang diperlukan untuk mengkonfigurasi jenis ini. Minimal, konstruktor harus menerima satu jenis atau nilai masukan yang diberikan pengguna hilang.
Kebutuhan jenis kustom tidak mendukung tipe data ukuran yang sama seperti yang dipersyaratkan oleh operator, tapi keduanya harus sama. Misalnya, Anda tidak bisa mentransisikan kursor panjang menjadi int.
Saat Anda menjalankan contoh ini, Anda melihat sebuah keluaran nilai 145. 6, yang merupakan nilai yang Anda masukkan ke tipe kustom.Mungkin untuk menangani setup yang cukup rumit dengan menggunakan pendekatan ini.Pengguna tipe kustom Anda memperoleh kemampuan untuk membuat kode yang jelas yang mudah diikuti dan ditafsirkan, bahkan ketika tipe dasarnya rumit.
Menggunakan UDL khusus untuk efek samping
Salah satu u yang paling menarik ses untuk UDL adalah menciptakan efek samping (operasi selain operasi biasa atau normal, baik untuk membuat aplikasi lebih pendek dan lebih efisien atau memberikan fleksibilitas tambahan). Anda ingin mendefinisikan jenis operasi tertentu yang terjadi sebagai hasil penentuan literal.
Apa yang Anda dapatkan masih merupakan literal, tapi literal yang tidak harus menunjukkan nilai yang akan Anda gunakan nanti. Contoh CustomUDL03 menunjukkan satu penggunaan non-tradisional seperti itu.
#include menggunakan namespace std; void operator "_countdown (unsigned long long Value) {untuk (int i = Nilai; i> = 0; i--) cout << i << endl;} int main () {10_countdown; return 0;}
Perhatikan bahwa operator _countdown tidak terikat pada sesuatu yang biasanya Anda kaitkan dengan sebuah nilai. Sebenarnya, itu sama sekali tidak mengembalikan nilai sama sekali. Apa yang Anda dapatkan sebagai pengganti adalah efek samping. Saat Anda menjalankan contoh ini, Anda lihatlah output ini
10 9 8 7 6 5 4 3 2 1 0
Apa yang telah terjadi adalah bahwa compiler telah mengganti 10_countdown dengan pernyataan cout individual, satu untuk setiap iterasi loop. Apa yang Anda hadapi adalah Efek samping UDL membuka segala macam kemungkinan menarik untuk membuat kode yang menyederhanakan tugas berulang tertentu dengan cara yang membuat penggunaannya jelas.