C++ Std::Volitelné

C Std Volitelne



Funkce „std::optional“ je poskytována v C++17. „Std::optional“ umožňuje typově bezpečnou reprezentaci volitelných hodnot nebo volbu hodnoty. Třída šablony s názvem „std::optional“ obsahuje volitelnou hodnotu, která může nebo nemusí obsahovat platnou hodnotu. Je to bezpečnější náhrada pro reprezentaci prázdných nebo volitelných hodnot než nezpracované ukazatele nebo jiné techniky. „Std::optional“ minimalizuje možnost chyb dereference nulového ukazatele tím, že vyžaduje, aby uživatel před načtením hodnoty explicitně ověřil, zda existuje.

Příklad 1:

V tomto kódu jsou importovány soubory záhlaví „volitelné“ a „iostream“. Tyto hlavičkové soubory musíme importovat, abychom měli snadný přístup k funkcím, které jsou v nich definovány. Poté zahrneme „namespace std“, takže jej nemusíme zadávat samostatně s funkcemi jako „std::optional“ a „std::cout“. Zde používáme „namespace std“. Nyní tedy umístíme „volitelné“ nebo „cout“, aniž bychom s nimi zadali „std“.

Potom zavoláme main() a umístíme „volitelný“ a nastavíme ho na „int“ a deklarujeme „myNum“. Je to syntaxe pro deklaraci proměnné „std::optional“. Poté inicializujeme další proměnnou s názvem „value“ a přiřadíme hodnotu proměnné „myNum“ pomocí funkce value_or(). V této funkci předáme „99“, takže tato funkce přiřadí toto „99“ proměnné „muNum“, pokud není přítomna žádná hodnota, a uloží ji do proměnné „value“. Poté pod to umístíme „cout“, což pomáhá při zobrazení hodnoty, kterou jsme přiřadili proměnné nad ní.







Kód 1:

#include

#include

pomocí jmenného prostoru std ;

int hlavní ( ) {

volitelný < int > myNum ;

int hodnota = myNum. hodnota_nebo ( 99 ) ;

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

vrátit se 0 ;

}

Výstup:



Zde si můžeme všimnout, že se zobrazuje „99“, což znamená, že hodnota nebyla přítomna výše a hodnota, kterou jsme přidali, je přiřazena této proměnné.







Příklad 2:

Nejprve zahrneme hlavičkové soubory a umístíme „namespace std“. Nyní pod tím deklarujeme funkci „std::optional“, což je „divideFunc()“. „Dividenda“ a „dělitel“ jsou dva parametry této funkce. Pod ním pak použijeme „if“, kde přidáme podmínku, která říká „dělitel != 0“. Pokud je toto splněno, vrátí odpověď tohoto rozdělení, když do něj přidáme „návrat“. V opačném případě vrátí „nullopt“, což znamená žádnou hodnotu typu safe. Nyní vyvoláme main(). Abychom odvodili „std::optional“, umístíme „divideFunc()“ a přidáme do něj „27, 3“ a výsledek přiřadíme do proměnné „quotient“.

Zde používáme klíčové slovo „auto“, takže automaticky upraví svůj datový typ. Poté přidáme „if“, kde používáme „hodnotu má“, která určuje, zda bude přijata typová hodnota. Poté umístíme „cout“, který vykresluje výsledek, který je uložen v proměnné „podíl“, a část „else“ obsahuje příkaz, který vykreslí, že dělitel je nula.



Kód 2:

#include

#include

pomocí jmenného prostoru std ;

volitelný < int > divisionFunc ( int dividenda , int dělič ) {

-li ( dělič != 0 ) {

vrátit se dividenda / dělič ;

}

vrátit se nullopt ;

}

int hlavní ( ) {

auto kvocient = divisionFunc ( 27 , 3 ) ;

-li ( kvocient. má_hodnotu ( ) ) {

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

} jiný {

cout << 'Tady dělitel je nula' << endl ;

}

vrátit se 0 ;

}

Výstup:

Výstup vykreslí výsledek po dělení, což znamená, že dělitel není nula. V tomto případě se „std::optional“ používá k určení, zda hodnota existuje nebo není typově bezpečná.

Příklad 3:

Zde deklarujeme proměnnou „std::optional“, což je „číslo“ uvnitř main(). Potom použijeme „if“, do kterého umístíme funkci has_value() s touto proměnnou „číslo“. Tím se zkontroluje, zda je v této proměnné „číslo“ hodnota nebo ne. Pokud proměnná „number“ obsahuje hodnotu, vykreslí příkaz, který jsme přidali za „if“. V opačném případě vykreslí prohlášení, které jsme umístili za „jinak“.

Nyní inicializujeme „číslo“ na „92“ a pod tím znovu použijeme „if“, kde je funkce has_value() přidána s proměnnou „číslo“ v „if jako podmínce“. To určuje, zda má proměnná „číslo“ hodnotu. Věta, kterou přidáme za „if“, se vykreslí, pokud má proměnná „číslo“ hodnotu. Pokud ne, vykreslí se výrok, který umístíme za „jinak“.

Kód 3:

#include

#include

int hlavní ( ) {

std :: volitelný < int > číslo ;

-li ( číslo. má_hodnotu ( ) ) {

std :: cout << 'Číslo je k dispozici:' << číslo. hodnota ( ) << std :: endl ;

} jiný {

std :: cout << 'Číslo není k dispozici.' << std :: endl ;

}

číslo = 92 ;

-li ( číslo. má_hodnotu ( ) ) {

std :: cout << 'Číslo je k dispozici:' << číslo. hodnota ( ) << std :: endl ;

} jiný {

std :: cout << 'Číslo není k dispozici.' << std :: endl ;

}

vrátit se 0 ;

}

Výstup:

Tím se nejprve vykreslí část „else“, protože proměnné „std::optional“ nepřiřadíme žádnou hodnotu. Poté této proměnné přiřadíme hodnotu, aby se tato hodnota zobrazila na dalším řádku.

Příklad 4:

Nyní deklarujeme tři proměnné „std::optional“, které jsou „n1“, „n2“ a „n3“. Hodnoty také přiřadíme proměnným „n2“ a „n3“, které jsou „29“ a „45“. Proměnná „n1“ třídy „std::optional“ je zde prázdná. Nyní používáme „boolalpha“, který pomáhá vrátit návrat ve formě „pravda“ nebo „nepravda“ spíše než „1“ a „0“.

Poté použijeme relační operátory mezi těmito proměnnými „std::optional“ a každý příkaz umístíme do „cout“, aby také vykreslil výsledek srovnání, které jsme přidali. Nejprve zkontroluje, že „n3 > n2“, poté „n3 < n2“, „n1 < n2“, „n1 == std::nullopt “. Zde se pro porovnání hodnoty typu no safe nebo null používá „nullopt“. Poté samostatně zaškrtneme „n2 == 49“ a „n3 == 88“ uvnitř příkazu „cout“.

Kód 4:

#include

#include

int hlavní ( )

{

std :: volitelný < int > n1 ;

std :: volitelný < int > n2 ( 29 ) ;

std :: volitelný < int > n3 ( Čtyři pět ) ;

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

Program C++, který jsme již zmínili, porovnává různé hodnoty proměnných typu „std::optional“ a současně tiskne výsledek na výstup.

Příklad 5:

Soubory záhlaví, které jsou součástí tohoto kódu, jsou „iostream“, „fstream“, „volitelné“ a „řetězec“. „fstream“ obsahuje definici obou funkcí, které jsou „ofstream“ a „ifstream“, které potřebujeme v tomto kódu. Nyní zahrneme „namespace std“, takže jej neumisťujeme samostatně s každou funkcí. Poté použijeme „std:optional“ a deklarujeme funkci s názvem „ReadFileFunc“, ve které předáme „const string& f_Name“ jako argument.

Pak máme „ifstream“, který pomáhá číst soubor, jehož jméno bude přidáno do proměnné „f_name“. Pak použijeme „if“, do kterého zahrneme podmínku, která říká, že pokud soubor není otevřen, vrátí „nullopt“, jak jsme jej přidali pod příkaz „if“. Poté vytvoříme další funkci, která je „fileContent“, která pomáhá při zápisu obsahu do souboru, pokud je soubor otevřen. Zde opět umístíme „return fileContent“, který také vrátí obsah, který jsme do souboru přidali po otevření.

Nyní zde zavoláme „main()“, ve kterém inicializujeme proměnnou „f_Name“ s názvem souboru „Sample.txt“, který chceme otevřít. Poté zde zavoláme „ReadFileFunc()“ a této funkci předáme proměnnou „f_Name“, která se pokusí načíst soubor a uloží jeho obsah do proměnné „f_content“. Pod tím používáme „has_value()“ s proměnnou „f_content“ v „if“. Pokud tato proměnná obsahuje hodnotu, vykreslí ji také, protože jsme přidali „cout“ pod „if“, do kterého jsme také umístili „f_content“. V opačném případě se zobrazí chyba, kterou jsme přidali za „jinak“.

Kód 5:

#include

#include

#include

#include <řetězec>

pomocí jmenného prostoru std ;

volitelný < tětiva > ReadFileFunc ( konst tětiva & f_Jméno ) {

ifstream myFile ( f_Jméno ) ;

-li ( ! myFile. je otevřeno ( ) ) {

vrátit se nullopt ;

}

řetězec fileContent ( ( isstreambuf_iterator < char > ( myFile ) ) , isstreambuf_iterator < char > ( ) ) ;

vrátit se fileContent ;

}

int hlavní ( ) {

konst řetězec f_Name = 'Sample.txt' ;

auto f_content = ReadFileFunc ( f_Jméno ) ;

-li ( f_content. má_hodnotu ( ) ) {

cout << 'Obsah souboru je: \n ' << f_content. hodnota ( ) << endl ;

} jiný {

cerr << 'Chyba: Soubor zde není otevřen' << f_Jméno << endl ;

}

vrátit se 0 ;

}

Výstup:

Zde zobrazuje chybové hlášení, které jsme přidali do části „else“ jako výsledek daného kódu.

Závěr

V tomto tutoriálu jsme prozkoumali silnou funkci C++, která je „std::optional“, a vysvětlili jsme, že nabízí standardizovanou metodu reprezentace volitelných hodnot, čímž se zbavíme požadavku na nulové odkazy a zvýšíme jasnost a bezpečnost kódu. Zjistili jsme, že to také zlepšuje schopnost vysvětlit složité problémy a vypořádat se s chybami s grácií.