C++ Std::Voliteľné

C Std Volitelne



Funkcia „std::voliteľné“ je poskytovaná v C++17. „Std::voliteľné“ umožňuje typovo bezpečnú reprezentáciu voliteľných hodnôt alebo výber hodnoty. Trieda šablóny s názvom „std::optional“ obsahuje voliteľnú hodnotu, ktorá môže alebo nemusí obsahovať platnú hodnotu. Je to bezpečnejšia náhrada na reprezentáciu prázdnych alebo voliteľných hodnôt ako nespracované ukazovatele alebo iné techniky. „std::voliteľné“ minimalizuje možnosť chýb dereferencovania nulového ukazovateľa tým, že vyžaduje, aby používateľ pred jej získaním explicitne overil, či hodnota existuje.

Príklad 1:

V tomto kóde sa importujú hlavičkové súbory „voliteľné“ a „iostream“. Tieto hlavičkové súbory musíme importovať, aby sme mali jednoduchý prístup k funkciám, ktoré sú v nich definované. Potom zahrnieme „priestor názvov std“, aby sme ho nemuseli písať samostatne s funkciami ako „std::voliteľné“ a „std::cout“. Tu používame „namespace std“. Takže teraz umiestnime „voliteľné“ alebo „cout“ bez toho, aby sme s nimi zadali „std“.

Potom zavoláme main() a umiestnime „voliteľné“ a nastavíme ho na „int“ a deklarujeme „myNum“. Je to syntax na deklarovanie premennej „std::voliteľné“. Potom inicializujeme ďalšiu premennú s názvom „value“ a priradíme hodnotu premennej „myNum“ pomocou funkcie value_or(). V tejto funkcii prejdeme „99“, takže táto funkcia priradí toto „99“ premennej „muNum“, ak nie je prítomná žiadna hodnota, a uloží ju do premennej „value“. Potom pod to umiestnime „cout“, čo pomáha pri zobrazení hodnoty, ktorú sme priradili premennej nad ňou.







Kód 1:

#include

#include

pomocou menného priestoru std ;

int Hlavná ( ) {

voliteľné < int > myNum ;

int hodnotu = myNum. hodnota_alebo ( 99 ) ;

cout << 'Hodnota myNum je: ' << hodnotu << endl ;

vrátiť 0 ;

}

Výkon:



Tu si môžeme všimnúť, že sa zobrazuje „99“, čo znamená, že hodnota nebola prítomná vyššie a hodnota, ktorú sme pridali, je priradená tejto premennej.







Príklad 2:

Najprv zahrnieme hlavičkové súbory a umiestnime „namespace std“. Teraz pod tým deklarujeme funkciu „std::voliteľné“, čo je „divideFunc()“. „Dividenda“ a „deliteľ“ sú dva parametre tejto funkcie. Potom použijeme „if“ pod ním, kde pridáme podmienku, ktorá hovorí „deliteľ != 0“. Ak je toto splnené, vráti odpoveď tohto rozdelenia, keď do neho pridáme „návrat“. V opačnom prípade vráti „nullopt“, čo znamená žiadnu hodnotu bezpečného typu. Teraz zavoláme main(). Aby sme odvodili „std::voliteľné“, umiestnime „divideFunc()“ a pridáme doň „27, 3“ a výsledok priradíme do premennej „quotient“.

Tu používame kľúčové slovo „auto“, takže automaticky upraví svoj typ údajov. Potom pridáme „ak“, kde používame „hodnotu má“, ktorá určuje, či sa dostane typová hodnota. Potom umiestnime „cout“, ktorý vykreslí výsledok, ktorý je uložený v premennej „kvót“ a časť „else“ obsahuje príkaz, ktorý vykreslí, že deliteľ je nula.



Kód 2:

#include

#include

pomocou menného priestoru std ;

voliteľné < int > divisionFunc ( int dividenda , int rozdeľovač ) {

ak ( rozdeľovač != 0 ) {

vrátiť dividenda / rozdeľovač ;

}

vrátiť nullopt ;

}

int Hlavná ( ) {

auto kvocient = divisionFunc ( 27 , 3 ) ;

ak ( kvocient. má_hodnotu ( ) ) {

cout << 'Kvocient je:' << kvocient. hodnotu ( ) << endl ;

} inak {

cout << 'Tu je deliteľ nula' << endl ;

}

vrátiť 0 ;

}

Výkon:

Výstup vykreslí výsledok po delení, čo znamená, že deliteľ nie je nula. V tomto prípade sa „std::voliteľné“ používa na určenie, či hodnota existuje alebo nie je typovo bezpečná.

Príklad 3:

Tu deklarujeme premennú „std::voliteľné“, čo je „číslo“ v hlavnej(). Potom použijeme „if“, do ktorého umiestnime funkciu has_value() s touto premennou „číslo“. Tým sa skontroluje, či je v tejto premennej „číslo“ hodnota alebo nie. Ak premenná „číslo“ obsahuje hodnotu, vykreslí príkaz, ktorý sme pridali za „ak“. V opačnom prípade vykreslí vyhlásenie, ktoré sme umiestnili za „ostatné“.

Teraz inicializujeme „číslo“ na „92“ a pod ním znova použijeme „if“, kde sa funkcia has_value() pridá s premennou „číslo“ v „ak ako podmienka“. Toto určuje, či premenná „číslo“ má alebo nemá hodnotu. Veta, ktorú pridáme za „ak“ sa vykreslí, ak má premenná „číslo“ hodnotu. Ak nie, vykreslí sa výrok, ktorý umiestnime za „ostatné“.

Kód 3:

#include

#include

int Hlavná ( ) {

std :: voliteľné < int > číslo ;

ak ( číslo. má_hodnotu ( ) ) {

std :: cout << 'Číslo je prítomné:' << číslo. hodnotu ( ) << std :: endl ;

} inak {

std :: cout << 'Číslo nie je k dispozícii.' << std :: endl ;

}

číslo = 92 ;

ak ( číslo. má_hodnotu ( ) ) {

std :: cout << 'Číslo je prítomné:' << číslo. hodnotu ( ) << std :: endl ;

} inak {

std :: cout << 'Číslo nie je k dispozícii.' << std :: endl ;

}

vrátiť 0 ;

}

Výkon:

Toto vykreslí najprv časť „else“, pretože premennej „std::voliteľné“ nepriraďujeme žiadnu hodnotu. Potom tejto premennej priradíme hodnotu, aby sa táto hodnota zobrazila v nasledujúcom riadku.

Príklad 4:

Teraz deklarujeme tri premenné „std::voliteľné“, ktoré sú „n1“, „n2“ a „n3“. Hodnoty tiež priraďujeme premenným „n2“ a „n3“, ktoré sú „29“ a „45“. Premenná „n1“ triedy „std::voliteľné“ je tu prázdna. Teraz používame „boolalpha“, ktorý pomáha pri vrátení návratnosti vo forme „pravda“ alebo „nepravda“ namiesto „1“ a „0“.

Potom použijeme relačné operátory medzi týmito premennými „std::voliteľné“ a umiestnime každý príkaz do „cout“, aby tiež vykreslil výsledok porovnania, ktoré sme pridali. Najprv skontroluje, že „n3 > n2“, potom „n3 < n2“, „n1 < n2“, „n1 == std::nullopt “. Tu sa „nullopt“ používa na porovnanie hodnoty typu no safe alebo null. Potom oddelene skontrolujeme „n2 == 49“ a „n3 == 88“ v príkaze „cout“.

Kód 4:

#include

#include

int Hlavná ( )

{

std :: voliteľné < int > n1 ;

std :: voliteľné < int > n2 ( 29 ) ;

std :: voliteľné < int > n3 ( Štyri ) ;

std :: cout << std :: alfanumerický ;

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ýkon:

Program C++, ktorý sme už spomenuli, porovnáva rôzne hodnoty premenných typu „std::voliteľné“ a súčasne tlačí výsledok na výstup.

Príklad 5:

Súbory hlavičiek, ktoré sú súčasťou tohto kódu, sú „iostream“, „fstream“, „voliteľné“ a „reťazec“. „fstream“ obsahuje definíciu oboch funkcií, ktoré sú „ofstream“ a „ifstream“, ktoré potrebujeme v tomto kóde. Teraz zahrnieme „namespace std“, takže ho neumiestňujeme samostatne s každou funkciou. Potom použijeme „std:voliteľné“ a deklarujeme funkciu s názvom „ReadFileFunc“, do ktorej zadáme „const string& f_Name“ ako argument.

Potom máme „ifstream“, ktorý pomáha čítať súbor, ktorého názov sa pridá do premennej „f_name“. Potom použijeme „if“, do ktorého zahrnieme podmienku, ktorá hovorí, že ak sa súbor neotvorí, vráti „nullopt“, ako sme ho pridali pod príkaz „if“. Potom vytvoríme ďalšiu funkciu, ktorá je „fileContent“, ktorá pomáha pri zapisovaní obsahu do súboru, ak je súbor otvorený. Tu opäť umiestnime „return fileContent“, ktorý vráti aj obsah, ktorý sme do súboru pridali po otvorení.

Teraz tu zavoláme „main()“, v ktorom inicializujeme premennú „f_Name“ s názvom súboru „Sample.txt“, ktorý chceme otvoriť. Potom tu zavoláme „ReadFileFunc()“ a tejto funkcii odovzdáme premennú „f_Name“, ktorá sa pokúsi prečítať súbor a uloží jeho obsah do premennej „f_content“. Pod tým používame „has_value()“ s premennou „f_content“ v „if“. Ak táto premenná obsahuje hodnotu, vykreslí ju aj tak, ako sme pridali „cout“ pod „if“, do ktorého sme umiestnili aj „f_content“. V opačnom prípade sa zobrazí chyba, ktorú sme pridali za „ostatné“.

Kód 5:

#include

#include

#include

#include

pomocou menného priestoru std ;

voliteľné < reťazec > ReadFileFunc ( konšt reťazec & f_Name ) {

ifstream myFile ( f_Name ) ;

ak ( ! myFile. je otvorené ( ) ) {

vrátiť nullopt ;

}

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

vrátiť fileContent ;

}

int Hlavná ( ) {

konšt reťazec f_Name = 'Sample.txt' ;

auto f_content = ReadFileFunc ( f_Name ) ;

ak ( f_content. má_hodnotu ( ) ) {

cout << 'Obsah súboru je: \n ' << f_content. hodnotu ( ) << endl ;

} inak {

cerr << 'Chyba: Súbor sa tu neotvoril' << f_Name << endl ;

}

vrátiť 0 ;

}

Výkon:

Tu zobrazuje chybové vyhlásenie, ktoré sme pridali do časti „ostatné“ ako výsledok daného kódu.

Záver

V tomto návode sme preskúmali silnú funkciu C++, ktorá je „std::voliteľné“, a vysvetlili sme, že ponúka štandardizovanú metódu reprezentácie voliteľných hodnôt, čím sa zbavuje požiadavky na nulové referencie a zvyšuje sa prehľadnosť a bezpečnosť kódu. Zistili sme, že to tiež zlepšuje schopnosť vysvetliť zložité problémy a riešiť chyby s gráciou.