C++ Std::Valikuline

C Std Valikuline



Funktsioon 'std::valikuline' on saadaval C++17-s. 'std::valikuline' võimaldab valikuliste väärtuste tüübikindlat esitust või väärtuse valikut. Malliklass nimega 'std::optional' sisaldab valikulist väärtust, mis võib või ei pruugi sisaldada kehtivat väärtust. See on tühjade või valikuliste väärtuste esitamiseks turvalisem asendus kui töötlemata osutid või muud tehnikad. 'std::valikuline' minimeerib nullkursori viitamise vigade võimalust, nõudes kasutajalt enne selle hankimist selgesõnaliselt kontrollimist, kas väärtus on olemas.

Näide 1:

Päisefailid 'valikuline' ja 'iostream' imporditakse sellesse koodi. Peame need päisefailid importima, et saaksime hõlpsasti juurde pääseda neis määratletud funktsioonidele. Pärast seda lisame nimeruumi std, nii et me ei peaks seda eraldi tippima funktsioonidega, nagu 'std::optional' ja 'std::cout'. Siin kasutame nimeruumi std. Nüüd asetame 'valikuline' või 'cout' ilma, et kirjutaksime nendega koos sõna 'std'.

Seejärel kutsume esile main() ja asetame valiku 'valikuline' ning määrame selle väärtuseks 'int' ja deklareerime 'myNum'. See on süntaks muutuja 'std::optional' deklareerimiseks. Seejärel initsialiseerime teise muutuja nimega 'value' ja määrame muutujale 'myNum' väärtuse, kasutades funktsiooni value_or (). Me edastame selles funktsioonis '99', nii et see määrab selle '99' muutujale 'muNum', kui väärtus puudub, ja salvestab selle muutujasse 'value'. Seejärel asetame selle alla 'cout', mis aitab kuvada väärtust, mille me selle kohal olevale muutujale määrasime.







Kood 1:

#include

#include

kasutades nimeruumi std ;

int peamine ( ) {

valikuline < int > minuNum ;

int väärtus = minuNum. väärtus_või ( 99 ) ;

cout << 'MinuNumi väärtus on:' << väärtus << endl ;

tagasi 0 ;

}

Väljund:



Siin võime märgata, et kuvatakse '99', mis tähendab, et väärtust ülalpool ei olnud ja meie lisatud väärtus on määratud sellele muutujale.







Näide 2:

Esmalt lisame päisefailid ja asetame nimeruumi std. Nüüd deklareerime selle all funktsiooni 'std::valikuline', mis on 'divideFunc()'. 'Dividend' ja 'jagaja' on selle funktsiooni kaks parameetrit. Seejärel kasutame selle all olevat „kui”, kuhu lisame tingimuse, mis ütleb „jagaja != 0”. Kui see on rahuldatud, tagastab see selle jaotuse vastuse, kuna lisame selle sisse 'tagasi'. Vastasel juhul tagastab see 'nullopt', mis tähendab, et ohutut tüüpi väärtust pole. Nüüd kutsume esile põhi(). 'std::optional' järeldamiseks asetame 'divideFunc()' ja lisame sellesse '27, 3' ja määrame tulemuse muutujale 'jagatis'.

Siin kasutame märksõna 'auto', nii et see kohandab automaatselt oma andmetüüpi. Pärast seda lisame 'if', kus kasutame 'has-value', mis määrab, kas tüübiväärtus on vastu võetud. Seejärel asetame 'cout', mis renderdab muutuja 'jagatis' salvestatud tulemuse, ja osa 'else' sisaldab avaldust, mis muudab jagaja nulliks.



Kood 2:

#include

#include

kasutades nimeruumi std ;

valikuline < int > divideFunc ( int dividend , int jagaja ) {

kui ( jagaja != 0 ) {

tagasi dividend / jagaja ;

}

tagasi nullopt ;

}

int peamine ( ) {

auto jagatis = divideFunc ( 27 , 3 ) ;

kui ( jagatis. on_väärtus ( ) ) {

cout << 'Jagatis on:' << jagatis. väärtus ( ) << endl ;

} muidu {

cout << 'Jagaja on siin null' << endl ;

}

tagasi 0 ;

}

Väljund:

Väljund esitab tulemuse pärast jagamist, mis tähendab, et jagaja ei ole null. Sel juhul kasutatakse 'std::valikuline' määramaks, kas väärtus on tüübikindlalt olemas või mitte.

Näide 3:

Siin deklareerime muutuja 'std::valikuline', mis on main() sees olev 'number'. Seejärel kasutame 'if', millesse asetame funktsiooni has_value() selle 'number' muutujaga. See kontrollib, kas selles 'number' muutujas on väärtus või mitte. Kui muutuja 'number' sisaldab väärtust, renderdab see lause, mille lisasime pärast 'if'. Vastasel juhul esitab see avalduse, mille panime sõna „muu” järele.

Nüüd initsialiseerime 'number' väärtusega '92' ja kasutame selle all uuesti 'if', kus funktsioon has_value() lisatakse muutujaga 'number' tingimuseks 'if'. See määrab, kas muutujal number on väärtus või mitte. Lause, mille lisame pärast sõna „if”, renderdatakse, kui muutujal „number” on väärtus. Kui ei, siis renderdatakse avaldus, mille asetame sõna „muu” järele.

Kood 3:

#include

#include

int peamine ( ) {

std :: valikuline < int > number ;

kui ( number. on_väärtus ( ) ) {

std :: cout << 'Number on olemas:' << number. väärtus ( ) << std :: endl ;

} muidu {

std :: cout << 'Numbrit pole.' << std :: endl ;

}

number = 92 ;

kui ( number. on_väärtus ( ) ) {

std :: cout << 'Number on olemas:' << number. väärtus ( ) << std :: endl ;

} muidu {

std :: cout << 'Numbrit pole.' << std :: endl ;

}

tagasi 0 ;

}

Väljund:

See renderdab kõigepealt osa „muu”, kuna me ei omista muutujale „std::optional” väärtust. Seejärel määrame sellele muutujale väärtuse, et kuvada see väärtus järgmisel real.

Näide 4:

Nüüd deklareerime kolm 'std::valikulist' muutujat, mis on 'n1', 'n2' ja 'n3'. Samuti omistame väärtused muutujatele 'n2' ja 'n3', mis on vastavalt '29' ja '45'. Klassi “std::optional” muutuja “n1” on siin tühi. Nüüd kasutame 'boolalpha', mis aitab tagastada tulu 'tõene' või 'vale' kujul, mitte '1' ja '0'.

Pärast seda kasutame nende muutujate 'std::optional' vahelisi relatsioonioperaatoreid ja asetame iga lause 'cout' sisse, nii et see renderdaks ka meie lisatud võrdluse tulemuse. Esiteks kontrollib see, et 'n3 > n2', seejärel 'n3 < n2', 'n1 < n2', 'n1 == std::nullopt'. Siin kasutatakse 'nullopt' no safe-tüüpi väärtuse või nulli võrdlemiseks. Seejärel kontrollime lauses “cout” eraldi “n2 == 49” ja “n3 == 88”.

Kood 4:

#include

#include

int peamine ( )

{

std :: valikuline < int > n1 ;

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

std :: valikuline < int > n3 ( Neli ) ;

std :: cout << std :: tähtnumbriline ;

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 == null' << ( n1 == std :: nullopt ) << std :: endl ;

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

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

}

Väljund:

Programm C++, mida me varem mainisime, võrdleb erinevaid std::optional tüüpi muutujate väärtusi, printides samal ajal tulemuse väljundisse.

Näide 5:

Selles koodis sisalduvad päisefailid on 'iostream', 'fstream', 'valikuline' ja 'string'. 'Fstream' sisaldab mõlema funktsiooni 'ofstream' ja 'ifstream' määratlust, mida me selles koodis vajame. Nüüd lisame nimeruumi std, nii et me ei paiguta seda iga funktsiooni juurde eraldi. Seejärel kasutame funktsiooni 'std:optional' ja deklareerime funktsiooni nimega 'ReadFileFunc', milles edastame argumendina 'const string& f_Name'.

Seejärel on meil 'ifstream', mis aitab lugeda faili, mille nimi lisatakse muutujale 'f_name'. Seejärel kasutame 'if', millesse lisame tingimuse, mis ütleb, et kui faili ei avata, tagastab see 'nullopt', nagu lisasime selle lause 'if' alla. Seejärel loome teise funktsiooni 'fileContent', mis aitab faili avamisel sisu faili kirjutada. Siin asetame uuesti faili 'tagasta failiContent', mis tagastab ka sisu, mille pärast avamist faili lisasime.

Nüüd kutsume siin välja 'main()', milles initsialiseerime muutuja 'f_Name' failinimega 'Sample.txt', mida tahame avada. Seejärel kutsume siin välja 'ReadFileFunc()' ja edastame selles funktsioonis muutuja 'f_Name', mis proovib faili lugeda ja salvestab selle sisu muutujas 'f_content'. Selle all kasutame 'has_value()' koos muutujaga 'f_content' väärtuses 'if'. Kui see muutuja sisaldab väärtust, renderdab see selle ka siis, kui lisasime sõna 'if' alla 'cout', millesse paigutasime ka 'f_content'. Vastasel juhul näitab see viga, mille lisasime pärast 'muu'.

Kood 5:

#include

#include

#include

#include

kasutades nimeruumi std ;

valikuline < string > ReadFileFunc ( konst string & f_Nimi ) {

ifstream myFile ( f_Nimi ) ;

kui ( ! myFile. on avatud ( ) ) {

tagasi nullopt ;

}

string failContent ( ( isstreambuf_iterator < char > ( myFile ) ) , isstreambuf_iterator < char > ( ) ) ;

tagasi failisisu ;

}

int peamine ( ) {

konst string f_Name = 'Sample.txt' ;

auto f_content = ReadFileFunc ( f_Nimi ) ;

kui ( f_content. on_väärtus ( ) ) {

cout << 'Faili sisu on: \n ' << f_content. väärtus ( ) << endl ;

} muidu {

cerr << 'Viga: faili ei avatud siin' << f_Nimi << endl ;

}

tagasi 0 ;

}

Väljund:

Siin näitab see veateadet, mille lisasime antud koodi tulemuseks osasse 'muu'.

Järeldus

Selles õpetuses uurisime tugevat C++ funktsiooni, mis on 'std::valikuline' ja selgitasime, et see pakub standardiseeritud meetodit valikuliste väärtuste esitamiseks, kaotades nullviidete nõude ning suurendades selgust ja koodi turvalisust. Saime teada, et see parandab ka võimet selgitada keerulisi probleeme ja käsitleda vigu armulikult.