C++ Std::Pēc izvēles

C Std Pec Izveles



Funkcija “std::optional” ir nodrošināta C++17. “std::optional” ļauj tipiski droši attēlot izvēles vērtības vai izvēlēties vērtību. Veidnes klase ar nosaukumu “std::optional” satur neobligātu vērtību, kas var saturēt vai nevar saturēt derīgu vērtību. Tas ir drošāks aizstājējs tukšo vai neobligāto vērtību attēlošanai nekā neapstrādātas norādes vai citas metodes. “std::optional” samazina nulles rādītāja atsauču kļūdu iespējamību, pieprasot lietotājam pirms tās izgūšanas nepārprotami pārbaudīt, vai vērtība pastāv.

1. piemērs:

Šajā kodā tiek importēti galvenes faili “neobligāti” un “iostream”. Mums ir jāimportē šie galvenes faili, lai mēs varētu viegli piekļūt tajos definētajām funkcijām. Pēc tam mēs iekļaujam “nosaukumvietu std”, lai mums tā nebūtu jāieraksta atsevišķi ar tādām funkcijām kā “std::optional” un “std::cout”. Šeit mēs izmantojam “namespace std”. Tagad mēs ievietojam “neobligāti” vai “cout”, neierakstot ar tiem “std”.

Pēc tam mēs izsaucam main() un ievietojam “optional” un iestatām to uz “int” un deklarējam “myNum”. Tā ir sintakse mainīgā “std::optional” deklarēšanai. Pēc tam mēs inicializējam citu mainīgo ar nosaukumu “value” un piešķiram vērtību mainīgajam “myNum”, izmantojot funkciju value_or(). Šajā funkcijā mēs nododam “99”, tāpēc tā piešķir šo “99” mainīgajam “muNum”, ja vērtības nav, un saglabā to mainīgajā “value”. Pēc tam zem tā ievietojam “cout”, kas palīdz parādīt vērtību, ko piešķīrām mainīgajam virs tā.







1. kods:

#include

#include

izmantojot namespace std ;

starpt galvenais ( ) {

neobligāti < starpt > myNum ;

starpt vērtību = myNum. vērtība_vai ( 99 ) ;

cout << 'myNum vērtība ir:' << vērtību << endl ;

atgriezties 0 ;

}

Izvade:



Šeit mēs varam pamanīt, ka tiek parādīts “99”, kas nozīmē, ka iepriekš minētā vērtība nebija, un pievienotā vērtība tiek piešķirta šim mainīgajam.







2. piemērs:

Vispirms iekļaujam galvenes failus un ievietojam “namespace std”. Tagad zem tā mēs deklarējam funkciju “std::optional”, kas ir “divideFunc()”. “Dividenda” un “dalītājs” ir divi šīs funkcijas parametri. Pēc tam mēs izmantojam “ja” zem tā, pievienojot nosacījumu, kas saka “dalītājs != 0”. Ja tas ir apmierināts, tas atgriež šī dalījuma atbildi, jo mēs pievienojam “atgriešanās”. Pretējā gadījumā tas atgriež “nullopt”, kas nozīmē, ka nav droša tipa vērtības. Tagad mēs izsaucam galveno (). Lai secinātu par “std::optional”, mēs ievietojam “divideFunc()” un pievienojam tam “27, 3” un piešķiram rezultātu mainīgajam “quotential”.

Šeit mēs izmantojam atslēgvārdu “auto”, lai tas automātiski pielāgotu savu datu veidu. Pēc tam mēs pievienojam “ja”, kur izmantojam “has-value”, kas nosaka, vai ir saņemta tipa vērtība. Pēc tam mēs ievietojam “cout”, kas atveido rezultātu, kas tiek saglabāts mainīgajā “daļņa”, un daļā “else” ir paziņojums, kas atveido, ka dalītājs ir nulle.



2. kods:

#include

#include

izmantojot namespace std ;

neobligāti < starpt > sadalītFunc ( starpt dalāmais , starpt sadalītājs ) {

ja ( sadalītājs != 0 ) {

atgriezties dalāmais / sadalītājs ;

}

atgriezties nullopt ;

}

starpt galvenais ( ) {

auto koeficients = sadalītFunc ( 27 , 3 ) ;

ja ( koeficients. ir_vērtība ( ) ) {

cout << Koeficients ir: << koeficients. vērtību ( ) << endl ;

} cits {

cout << 'Šeit dalītājs ir nulle' << endl ;

}

atgriezties 0 ;

}

Izvade:

Izvade parāda rezultātu pēc dalīšanas, kas nozīmē, ka dalītājs nav nulle. Šajā gadījumā “std::optional” tiek izmantots, lai noteiktu, vai vērtība pastāv vai nav tipa droši.

3. piemērs:

Šeit mēs deklarējam mainīgo “std::optional”, kas ir “numurs” galvenajā (). Pēc tam mēs izmantojam “if”, kurā ievietojam funkciju has_value() ar šo mainīgo “number”. Tas pārbauda, ​​vai šajā mainīgajā “skaitlis” ir vērtība. Ja mainīgais “number” satur vērtību, tas atveido paziņojumu, ko pievienojām aiz “if”. Pretējā gadījumā tas atveido paziņojumu, kuru ievietojām aiz “cits”.

Tagad mēs inicializējam “numuru” ar “92” un atkal zem tā izmantojam “if”, kur funkcija has_value() tiek pievienota ar mainīgo “number” pozīcijā “if kā nosacījums”. Tas nosaka, vai mainīgajam “number” ir vērtība. Teikums, ko pievienojam pēc “if”, tiek renderēts, ja mainīgajam “number” ir vērtība. Ja nē, tiek atveidots paziņojums, ko ievietojam aiz “cits”.

3. kods:

#include

#include

starpt galvenais ( ) {

std :: neobligāti < starpt > numuru ;

ja ( numuru. ir_vērtība ( ) ) {

std :: cout << 'Numurs ir klāt:' << numuru. vērtību ( ) << std :: endl ;

} cits {

std :: cout << 'Numurs nav klāt.' << std :: endl ;

}

numuru = 92 ;

ja ( numuru. ir_vērtība ( ) ) {

std :: cout << 'Numurs ir klāt:' << numuru. vērtību ( ) << std :: endl ;

} cits {

std :: cout << 'Numurs nav klāt.' << std :: endl ;

}

atgriezties 0 ;

}

Izvade:

Tas vispirms atveido daļu “else”, jo mainīgajam “std::optional” mēs nepiešķiram nekādu vērtību. Pēc tam šim mainīgajam piešķiram vērtību, lai parādītu šo vērtību nākamajā rindā.

4. piemērs:

Tagad mēs deklarējam trīs “std::optional” mainīgos, kas ir “n1”, “n2” un “n3”. Mēs arī piešķiram vērtības “n2” un “n3” mainīgajiem lielumiem, kas ir attiecīgi “29” un “45”. Klases “std::optional” mainīgais “n1” šeit ir tukšs. Tagad mēs izmantojam “boolalpha”, kas palīdz atgriezt atdevi formā “patiesa” vai “nepatiesa”, nevis “1” un “0”.

Pēc tam mēs izmantojam relāciju operatorus starp šiem “std::optional” mainīgajiem un ievietojam katru paziņojumu “cout” iekšpusē, lai tas atveidotu arī mūsu pievienotā salīdzinājuma rezultātu. Vispirms tiek pārbaudīts, vai “n3 > n2”, pēc tam — “n3 < n2”, “n1 < n2”, “n1 == std::nullopt”. Šeit “nullopt” tiek izmantots, lai salīdzinātu bez droša tipa vērtību vai nulli. Pēc tam mēs atsevišķi pārbaudām “n2 == 49” un “n3 == 88” priekšrakstā “cout”.

4. kods:

#include

#include

starpt galvenais ( )

{

std :: neobligāti < starpt > n1 ;

std :: neobligāti < starpt > n2 ( 29 ) ;

std :: neobligāti < starpt > n3 ( Četri ) ;

std :: cout << std :: burtciparu ;

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 ;

}

Izvade:

Iepriekš pieminētā C++ programma salīdzina dažādas “std::optional” tipa mainīgās vērtības, vienlaikus izdrukājot rezultātu izvadei.

5. piemērs:

Šajā kodā iekļautie galvenes faili ir “iostream”, “fstream”, “neobligāti” un “string”. “Fstream” satur abu funkciju definīciju, kas ir “ofstream” un “ifstream”, kas mums vajadzīgas šajā kodā. Tagad mēs iekļaujam “namespace std”, tāpēc mēs to nenovietojam atsevišķi katrai funkcijai. Pēc tam mēs izmantojam “std:optional” un deklarējam funkciju ar nosaukumu “ReadFileFunc”, kurā kā argumentu nododam “const string& f_Name”.

Pēc tam mums ir “ifstream”, kas palīdz nolasīt failu, kura nosaukums tiks pievienots mainīgajam “f_name”. Pēc tam mēs izmantojam “if”, kurā iekļaujam nosacījumu, kas saka, ja fails netiek atvērts, tas atgriež “nullopt”, kā mēs to pievienojām zem priekšraksta “if”. Pēc tam mēs izveidojam citu funkciju, kas ir “fileContent”, kas palīdz rakstīt saturu failā, ja fails tiek atvērts. Šeit mēs atkal ievietojam “return fileContent”, kas arī atgriež saturu, ko pievienojām failam pēc atvēršanas.

Tagad mēs šeit izsaucam “main()”, kurā inicializējam mainīgo “f_Name” ar faila nosaukumu “Sample.txt”, kuru vēlamies atvērt. Pēc tam mēs šeit izsaucam “ReadFileFunc()” un šajā funkcijā nododam mainīgo “f_Name”, kas mēģina nolasīt failu un saglabā tā saturu mainīgajā “f_content”. Zem tā mēs izmantojam “has_value()” ar mainīgo “f_content” laukā “if”. Ja šis mainīgais satur vērtību, tas arī atveido to, jo mēs pievienojām “cout” zem “if”, kurā ievietojām arī “f_content”. Pretējā gadījumā tiek parādīta kļūda, kuru pievienojām pēc “cits”.

5. kods:

#include

#include

#include

#include

izmantojot namespace std ;

neobligāti < virkne > ReadFileFunc ( konst virkne & f_Nosaukums ) {

ifstream myFile ( f_Nosaukums ) ;

ja ( ! myFile. ir_atvērts ( ) ) {

atgriezties nullopt ;

}

virknes failsContent ( ( isstreambuf_iterator < char > ( myFile ) ) , isstreambuf_iterator < char > ( ) ) ;

atgriezties faila saturs ;

}

starpt galvenais ( ) {

konst virkne f_Name = 'Sample.txt' ;

auto f_content = ReadFileFunc ( f_Nosaukums ) ;

ja ( f_content. ir_vērtība ( ) ) {

cout << 'Faila saturs ir: \n ' << f_content. vērtību ( ) << endl ;

} cits {

cerr << 'Kļūda: fails šeit nav atvērts' << f_Nosaukums << endl ;

}

atgriezties 0 ;

}

Izvade:

Šeit tiek parādīts kļūdas paziņojums, kuru mēs pievienojām daļā “cits” kā dotā koda rezultātu.

Secinājums

Šajā apmācībā mēs izpētījām spēcīgo C++ funkciju, kas ir “std::optional”, un paskaidrojām, ka tā piedāvā standartizētu metodi izvēles vērtību attēlošanai, atceļot prasību par nulles atsaucēm un uzlabojot skaidrību un koda drošību. Mēs uzzinājām, ka tas uzlabo arī spēju izskaidrot sarežģītos jautājumus un pieklājīgi risināt kļūdas.