C++ Std::Pilihan

C Std Pilihan



Ciri 'std::optional' disediakan dalam C++17. 'std::optional' membenarkan perwakilan jenis selamat bagi nilai pilihan atau pilihan untuk mempunyai nilai. Kelas templat yang dipanggil 'std::optional' mengandungi nilai pilihan yang mungkin mengandungi nilai yang sah atau tidak. Ia adalah pengganti yang lebih selamat untuk mewakili nilai kosong atau pilihan daripada penunjuk mentah atau teknik lain. 'std::optional' meminimumkan kemungkinan ralat penolakan penunjuk nol dengan menghendaki pengguna untuk mengesahkan secara eksplisit sama ada nilai wujud sebelum mendapatkannya semula.

Contoh 1:

Fail pengepala 'pilihan' dan 'iostream' diimport dalam kod ini. Kita mesti mengimport fail pengepala ini supaya kita boleh mengakses fungsi yang ditakrifkan di dalamnya dengan mudah. Selepas ini, kami memasukkan 'ruang nama std' supaya kami tidak perlu menaipnya dengan fungsi secara berasingan seperti 'std::optional' dan 'std::cout'. Kami menggunakan 'ruang nama std' di sini. Jadi, sekarang, kami meletakkan 'pilihan' atau 'cout' tanpa menaip 'std' dengannya.

Kemudian, kami memanggil main() dan meletakkan 'pilihan' dan menetapkannya kepada 'int' dan mengisytiharkan 'myNum'. Ia adalah sintaks untuk mengisytiharkan pembolehubah 'std::optional'. Kemudian, kami memulakan pembolehubah lain bernama 'nilai' dan memberikan nilai kepada pembolehubah 'myNum' dengan menggunakan fungsi value_or(). Kami menghantar '99' dalam fungsi ini, jadi ia memberikan '99' ini kepada pembolehubah 'muNum' jika tiada nilai hadir dan menyimpannya dalam pembolehubah 'nilai'. Kemudian, kami meletakkan 'cout' di bawah ini yang membantu dalam memaparkan nilai yang kami tetapkan kepada pembolehubah di atasnya.







Kod 1:

#include

#include

menggunakan ruang nama std ;

int utama ( ) {

pilihan < int > myNum ;

int nilai = myNum. nilai_atau ( 99 ) ;

cout << 'Nilai myNum ialah: ' << nilai << endl ;

kembali 0 ;

}

Pengeluaran:



Di sini, kita dapat melihat bahawa '99' dipaparkan yang bermaksud bahawa nilai tidak terdapat di atas dan nilai yang kami tambahkan diberikan kepada pembolehubah tersebut.







Contoh 2:

Kami mula-mula memasukkan fail pengepala dan meletakkan 'ruang nama std'. Sekarang, di bawah ini, kami mengisytiharkan fungsi 'std::optional' iaitu 'divideFunc()'. 'Dividen' dan 'pembahagi' adalah dua parameter fungsi ini. Kami kemudian menggunakan 'jika' di bawahnya di mana kami menambah syarat yang mengatakan 'pembahagi != 0'. Jika ini berpuas hati, ia mengembalikan jawapan bahagian ini kerana kami menambah 'pulangan' di dalamnya. Jika tidak, ia mengembalikan 'nullopt' yang bermaksud tiada nilai jenis selamat. Sekarang, kami menggunakan main(). Untuk membuat kesimpulan kepada 'std::optional', kami meletakkan 'divideFunc()' dan menambah '27, 3' di dalamnya dan memberikan hasilnya kepada pembolehubah 'quotient'.

Di sini, kami menggunakan kata kunci 'auto' supaya ia melaraskan jenis datanya secara automatik. Selepas ini, kami menambah 'jika' di mana kami menggunakan 'mempunyai nilai' yang menentukan sama ada nilai jenis diterima. Kemudian, kami meletakkan 'cout' yang menjadikan hasil yang disimpan dalam pembolehubah 'quotient', dan bahagian 'lain' mengandungi pernyataan yang menjadikan pembahagi adalah sifar.



Kod 2:

#include

#include

menggunakan ruang nama std ;

pilihan < int > divideFunc ( int dividen , int pembahagi ) {

jika ( pembahagi != 0 ) {

kembali dividen / pembahagi ;

}

kembali nullopt ;

}

int utama ( ) {

auto quotient = divideFunc ( 27 , 3 ) ;

jika ( quotient. mempunyai_nilai ( ) ) {

cout << 'Hasil bagi ialah:' << quotient. nilai ( ) << endl ;

} lain {

cout << 'Pembahagi adalah sifar di sini' << endl ;

}

kembali 0 ;

}

Pengeluaran:

Output menjadikan hasil selepas pembahagian yang bermaksud bahawa pembahagi bukan sifar. Dalam keadaan ini, 'std::optional' digunakan untuk menentukan sama ada nilai wujud atau tidak taip-selamat.

Contoh 3:

Di sini, kami mengisytiharkan pembolehubah 'std::optional' iaitu 'nombor' di dalam main(). Kemudian, kami menggunakan 'jika' di mana kami meletakkan fungsi has_value() dengan pembolehubah 'nombor' ini. Ini menyemak sama ada terdapat nilai atau tidak dalam pembolehubah 'nombor' ini. Jika pembolehubah 'nombor' mengandungi nilai, ia memaparkan pernyataan yang kami tambah selepas 'jika'. Jika tidak, ia menjadikan pernyataan yang kami letakkan selepas 'lain'.

Sekarang, kami memulakan 'nombor' dengan '92' dan menggunakan 'jika' sekali lagi di bawah ini di mana fungsi has_value() ditambah dengan pembolehubah 'nombor' dalam 'jika sebagai syarat'. Ini menentukan sama ada pembolehubah 'nombor' mempunyai nilai atau tidak. Ayat yang kita tambah selepas 'jika' diberikan jika pembolehubah 'nombor' mempunyai nilai. Jika tidak, pernyataan yang kami letakkan selepas 'lain' diberikan.

Kod 3:

#include

#include

int utama ( ) {

std :: pilihan < int > nombor ;

jika ( nombor. mempunyai_nilai ( ) ) {

std :: cout << 'Nombor itu ada:' << nombor. nilai ( ) << std :: endl ;

} lain {

std :: cout << 'Nombornya tidak ada.' << std :: endl ;

}

nombor = 92 ;

jika ( nombor. mempunyai_nilai ( ) ) {

std :: cout << 'Nombor itu ada:' << nombor. nilai ( ) << std :: endl ;

} lain {

std :: cout << 'Nombornya tidak ada.' << std :: endl ;

}

kembali 0 ;

}

Pengeluaran:

Ini menjadikan bahagian 'lain' terlebih dahulu kerana kami tidak memberikan sebarang nilai kepada pembolehubah 'std::pilihan'. Kemudian, kami memberikan nilai kepada pembolehubah ini untuk memaparkan nilai itu dalam baris seterusnya.

Contoh 4:

Sekarang, kami mengisytiharkan tiga pembolehubah 'std::optional' iaitu 'n1', 'n2', dan 'n3'. Kami juga memberikan nilai kepada pembolehubah 'n2' dan 'n3' iaitu '29' dan '45', masing-masing. Pembolehubah 'n1' bagi kelas 'std::optional' kosong di sini. Kini, kami menggunakan 'boolalpha' yang membantu dalam mengembalikan pulangan dalam bentuk 'benar' atau 'palsu' dan bukannya '1' dan '0'.

Selepas ini, kami menggunakan pengendali hubungan antara pembolehubah 'std::pilihan' ini dan meletakkan setiap pernyataan di dalam 'cout' supaya ia juga akan memberikan hasil perbandingan yang kami tambahkan. Mula-mula, ia menyemak bahawa 'n3 > n2', kemudian 'n3 < n2', 'n1 < n2', 'n1 == std::nullopt '. Di sini, 'nullopt' digunakan untuk membandingkan tiada nilai jenis selamat atau nol. Kemudian, kita semak 'n2 == 49' dan 'n3 == 88' di dalam pernyataan 'cout' secara berasingan.

Kod 4:

#include

#include

int utama ( )

{

std :: pilihan < int > n1 ;

std :: pilihan < int > n2 ( 29 ) ;

std :: pilihan < int > n3 ( Empat lima ) ;

std :: cout << std :: abjad angka ;

std :: cout << 'N3 > n2' << ( n3 > n2 ) << std :: endl ;

std :: cout << 'N3 < n2' << ( n3 < n2 ) << std :: endl ;

std :: cout << 'N1 < n2' << ( n1 < n2 ) << std :: endl ;

std :: cout << 'N1 == nol' << ( n1 == std :: nullopt ) << std :: endl ;

std :: cout << 'N2 == 49' << ( n2 == 29 ) << std :: endl ;

std :: cout << 'N3 == 88' << ( n3 == 88 ) << std :: endl ;

}

Pengeluaran:

Program C++ yang kami nyatakan sebelum ini membandingkan pelbagai nilai pembolehubah jenis “std::optional” sambil mencetak hasil pada output secara serentak.

Contoh 5:

Fail pengepala yang disertakan dalam kod ini ialah “iostream”, “fstream”, “optional”, dan “string”. 'fstream' mengandungi takrifan kedua-dua fungsi iaitu 'ofstream' dan 'ifstream' yang kami perlukan dalam kod ini. Sekarang, kami memasukkan 'ruang nama std', jadi kami tidak meletakkannya secara berasingan dengan setiap fungsi. Kemudian, kami menggunakan 'std:optional' dan mengisytiharkan fungsi dengan nama 'ReadFileFunc' di mana kami menghantar 'const string& f_Name' sebagai hujah.

Kemudian, kami mempunyai 'ifstream' yang membantu membaca fail yang namanya akan ditambahkan pada pembolehubah 'f_name'. Kemudian, kami menggunakan 'jika' di mana kami memasukkan syarat yang menyatakan jika fail tidak dibuka, ia mengembalikan 'nullopt' kerana kami menambahkannya di bawah pernyataan 'jika'. Kemudian, kami mencipta satu lagi fungsi iaitu 'fileContent' yang membantu dalam menulis kandungan ke fail jika fail dibuka. Di sini, kami meletakkan 'kembali kandungan fail' sekali lagi yang turut mengembalikan kandungan yang kami tambahkan pada fail selepas dibuka.

Sekarang, kami memanggil 'main()' di sini di mana kami memulakan pembolehubah 'f_Name' dengan nama fail 'Sample.txt' yang kami mahu buka. Kemudian, kami memanggil 'ReadFileFunc()' di sini dan lulus pembolehubah 'f_Name' dalam fungsi ini yang cuba membaca fail dan menyimpan kandungannya dalam pembolehubah 'f_content'. Di bawah ini, kami menggunakan 'has_value()' dengan pembolehubah 'f_content' dalam 'if'. Jika pembolehubah ini mengandungi nilai, ia juga memaparkannya semasa kami menambah 'cout' di bawah 'jika' di mana kami turut meletakkan 'f_content'. Jika tidak, ia menunjukkan ralat yang kami tambah selepas 'lain'.

Kod 5:

#include

#include

#include

#include

menggunakan ruang nama std ;

pilihan < tali > ReadFileFunc ( const tali & f_Nama ) {

ifstream myFile ( f_Nama ) ;

jika ( ! myFile. ia terbuka ( ) ) {

kembali nullopt ;

}

rentetan failKandungan ( ( isstreambuf_iterator < char > ( myFile ) ) , isstreambuf_iterator < char > ( ) ) ;

kembali kandungan fail ;

}

int utama ( ) {

const rentetan f_Nama = 'Sample.txt' ;

auto f_kandungan = ReadFileFunc ( f_Nama ) ;

jika ( f_kandungan. mempunyai_nilai ( ) ) {

cout << 'Kandungan fail ialah: \n ' << f_kandungan. nilai ( ) << endl ;

} lain {

    cerr << 'Ralat: Fail tidak dibuka di sini ' << f_Nama << endl ;

}

kembali 0 ;

}

Pengeluaran:

Di sini, ia menunjukkan pernyataan ralat yang kami tambahkan dalam bahagian 'lain' sebagai hasil kod yang diberikan.

Kesimpulan

Dalam tutorial ini, kami meneroka ciri C++ yang kuat iaitu 'std::optional' dan menjelaskan bahawa ia menawarkan kaedah piawai untuk mewakili nilai pilihan, menghapuskan keperluan untuk rujukan nol dan meningkatkan kejelasan dan keselamatan kod. Kami mengetahui bahawa ia juga meningkatkan keupayaan untuk menjelaskan isu rumit dan menangani kesilapan dengan baik.