Ц++ Стд::Опционално

C Std Opcionalno



Функција „стд::оптионал“ је обезбеђена у Ц++17. „стд::оптионал“ омогућава безбедно представљање опционих вредности или избор вредности. Класа шаблона под називом „стд::оптионал“ садржи опциону вредност која може, али не мора да садржи исправну вредност. То је сигурнија замена за представљање празних или опционих вредности од необрађених показивача или других техника. „стд::оптионал“ минимизира могућност грешака дереференцирања нултог показивача тако што захтева од корисника да експлицитно провери да ли вредност постоји пре него што је преузме.

Пример 1:

Датотеке заглавља „опционо“ и „иостреам“ се увозе у овај код. Морамо да увеземо ове датотеке заглавља како бисмо лако могли да приступимо функцијама које су у њима дефинисане. Након овога, укључујемо „простор имена стд“ тако да не морамо да га куцамо одвојено са функцијама као што су „стд::оптионал“ и „стд::цоут“. Овде користимо „намеспаце стд“. Дакле, сада постављамо „опционо“ или „цоут“ без куцања „стд“ са њима.

Затим, позивамо маин() и постављамо „опционо“ и постављамо га на „инт“ и декларишемо „миНум“. То је синтакса за декларисање променљиве „стд::оптионал“. Затим иницијализујемо другу променљиву под називом „вредност“ и додељујемо вредност променљивој „миНум“ коришћењем функције валуе_ор(). Ми прослеђујемо „99“ у овој функцији, тако да она додељује ово „99“ променљивој „муНум“ ако не постоји вредност и чува је у променљивој „валуе“. Затим стављамо „цоут“ испод овога што помаже у приказивању вредности коју смо доделили променљивој изнад.







Код 1:

#инцлуде <опционо>

#инцлуде <иостреам>

користећи простор имена стд ;

инт главни ( ) {

опционо < инт > миНум ;

инт вредност = миНум. вредност_или ( 99 ) ;

цоут << 'Вредност миНум је: ' << вредност << ендл ;

повратак 0 ;

}

Излаз:



Овде можемо приметити да је приказано „99“ што значи да вредност није била присутна изнад и вредност коју смо додали је додељена тој променљивој.







Пример 2:

Прво укључујемо датотеке заглавља и постављамо „простор имена стд“. Сада, испод овога, декларишемо функцију „стд::оптионал“ која је „дивидеФунц()“. „Дивиденда“ и „делилац“ су два параметра ове функције. Затим користимо „ако“ испод њега где додајемо услов који каже „деоник != 0“. Ако је ово задовољено, враћа одговор ове поделе док додамо „повратак“ у ово. У супротном, враћа „нуллопт“ што значи да нема вредности сигурног типа. Сада, позивамо маин(). Да бисмо закључили о „стд::оптионал“, стављамо „дивидеФунц()“ и додајемо „27, 3“ у њега и додељујемо резултат променљивој „количник“.

Овде користимо кључну реч „ауто” тако да аутоматски прилагођава свој тип података. Након тога, додајемо „ако“ где користимо „има вредност“ која одређује да ли је примљена вредност типа. Затим постављамо „цоут“ који приказује резултат који је сачуван у променљивој „количник“, а део „елсе“ садржи изјаву која приказује да је делилац нула.



Код 2:

#инцлуде <иостреам>

#инцлуде <опционо>

користећи простор имена стд ;

опционо < инт > дивидеФунц ( инт дивиденда , инт разделник ) {

ако ( разделник != 0 ) {

повратак дивиденда / разделник ;

}

повратак нуллопт ;

}

инт главни ( ) {

ауто количник = дивидеФунц ( 27 , 3 ) ;

ако ( количник. хас_валуе ( ) ) {

цоут << 'Количник је: ' << количник. вредност ( ) << ендл ;

} друго {

цоут << 'Делилац је овде нула' << ендл ;

}

повратак 0 ;

}

Излаз:

Излаз приказује резултат након дељења што значи да делилац није нула. У овом случају, „стд::оптионал“ се користи да би се утврдило да ли вредност постоји или не безбедан тип.

Пример 3:

Овде декларишемо променљиву „стд::оптионал“ која је „број“ унутар маин(). Затим користимо „иф“ у који постављамо функцију хас_валуе() са овом променљивом „број“. Ово проверава да ли постоји вредност или не у овој променљивој „број“. Ако променљива „број“ садржи вредност, она приказује изјаву коју смо додали после „иф“. У супротном, приказује изјаву коју смо ставили иза „елсе“.

Сада иницијализујемо „број“ са „92“ и поново користимо „иф“ испод овога где се функција хас_валуе() додаје са променљивом „нумбер“ у „иф као услов“. Ово одређује да ли променљива „број“ има вредност или не. Реченица коју додамо после „ако“ се приказује ако променљива „број“ има вредност. Ако није, приказује се изјава коју стављамо иза „елсе“.

Код 3:

#инцлуде <иостреам>

#инцлуде <опционо>

инт главни ( ) {

стд :: опционо < инт > број ;

ако ( број. хас_валуе ( ) ) {

стд :: цоут << 'Број је присутан: ' << број. вредност ( ) << стд :: ендл ;

} друго {

стд :: цоут << „Број није присутан.“ << стд :: ендл ;

}

број = 92 ;

ако ( број. хас_валуе ( ) ) {

стд :: цоут << 'Број је присутан: ' << број. вредност ( ) << стд :: ендл ;

} друго {

стд :: цоут << „Број није присутан.“ << стд :: ендл ;

}

повратак 0 ;

}

Излаз:

Ово прво приказује део „елсе“ јер не додељујемо никакву вредност променљивој „стд::оптионал“. Затим, додељујемо вредност овој променљивој да прикажемо ту вредност у следећем реду.

Пример 4:

Сада декларишемо три „стд::оптионал“ променљиве које су „н1“, „н2“ и „н3“. Такође додељујемо вредности променљивим „н2” и „н3” које су „29” и „45”, респективно. Променљива „н1“ класе „стд::оптионал“ је овде празна. Сада користимо „боолалпха“ која помаже у враћању повратка у „тачном“ или „нетачном“ облику, а не у „1“ и „0“.

После овога, користимо релационе операторе између ових „стд::оптионал“ променљивих и стављамо сваку наредбу унутар „цоут“ тако да би такође приказао резултат поређења које смо додали. Прво, проверава да ли је „н3 > н2”, затим „н3 < н2”, „н1 < н2”, „н1 == стд::нуллопт”. Овде се „нуллопт“ користи за поређење вредности без безбедног типа или нулл. Затим проверавамо „н2 == 49” и „н3 == 88” унутар „цоут” изјаве засебно.

Код 4:

#инцлуде <опционо>

#инцлуде <иостреам>

инт главни ( )

{

стд :: опционо < инт > н1 ;

стд :: опционо < инт > н2 ( 29 ) ;

стд :: опционо < инт > н3 ( Четири, пет ) ;

стд :: цоут << стд :: алфанумерички ;

стд :: цоут << „Н3 > н2“ << ( н3 > н2 ) << стд :: ендл ;

стд :: цоут << 'Н3 < н2' << ( н3 < н2 ) << стд :: ендл ;

стд :: цоут << 'Н1 < н2' << ( н1 < н2 ) << стд :: ендл ;

стд :: цоут << 'Н1 == нулл' << ( н1 == стд :: нуллопт ) << стд :: ендл ;

стд :: цоут << 'Н2 == 49 ' << ( н2 == 29 ) << стд :: ендл ;

стд :: цоут << 'Н3 == 88 ' << ( н3 == 88 ) << стд :: ендл ;

}

Излаз:

Ц++ програм који смо претходно споменули пореди различите вредности променљивих типа „стд::оптионал“ док истовремено штампа резултат на излазу.

Пример 5:

Датотеке заглавља које су укључене у овај код су „иостреам“, „фстреам“, „опционо“ и „стринг“. „фстреам“ садржи дефиницију обе функције које су „офстреам“ и „ифстреам“ које су нам потребне у овом коду. Сада укључујемо „простор имена стд“, тако да га не стављамо одвојено са сваком функцијом. Затим користимо „стд:оптионал“ и декларишемо функцију са именом „РеадФилеФунц“ у којој прослеђујемо „цонст стринг& ф_Наме“ као аргумент.

Затим имамо „ифстреам“ који помаже да се прочита датотека чије име ће бити додато променљивој „ф_наме“. Затим користимо „иф“ у који укључујемо услов који каже да ако датотека није отворена, враћа „нуллопт“ како смо га додали испод изјаве „иф“. Затим креирамо другу функцију која је „филеЦонтент“ која помаже у писању садржаја у датотеку ако се датотека отвори. Овде поново постављамо „ретурн филеЦонтент“ који такође враћа садржај који смо додали у датотеку након отварања.

Сада овде позивамо „маин()“ у коме иницијализујемо променљиву „ф_Наме“ са именом датотеке „Сампле.ткт“ коју желимо да отворимо. Затим овде позивамо „РеадФилеФунц()“ и проследимо променљиву „ф_Наме“ у ову функцију која покушава да прочита датотеку и чува њен садржај у променљивој „ф_цонтент“. Испод овога користимо „хас_валуе()“ са променљивом „ф_цонтент“ у „иф“. Ако ова променљива садржи вредност, она је такође приказује пошто смо додали „цоут“ испод „иф“ у који смо такође ставили „ф_цонтент“. У супротном, приказује грешку коју смо додали после „елсе“.

Код 5:

#инцлуде <иостреам>

#инцлуде <фстреам>

#инцлуде <опционо>

#инцлуде <стринг>

користећи простор имена стд ;

опционо < низ > РеадФилеФунц ( конст низ & ф_Наме ) {

ифстреам миФиле ( ф_Наме ) ;

ако ( ! миФиле. је отворен ( ) ) {

повратак нуллопт ;

}

стринг филеЦонтент ( ( исстреамбуф_итератор < цхар > ( миФиле ) ) , исстреамбуф_итератор < цхар > ( ) ) ;

повратак филеЦонтент ;

}

инт главни ( ) {

конст стринг ф_Наме = „Сампле.ткт“ ;

ауто ф_цонтент = РеадФилеФунц ( ф_Наме ) ;

ако ( ф_цонтент. хас_валуе ( ) ) {

цоут << „Садржај датотеке је: ' << ф_цонтент. вредност ( ) << ендл ;

} друго {

церр << „Грешка: Датотека није отворена овде“ << ф_Наме << ендл ;

}

повратак 0 ;

}

Излаз:

Овде се приказује изјава о грешци коју смо додали у делу „друго“ као резултат датог кода.

Закључак

У овом водичу смо истражили снажну Ц++ функцију која је „стд::оптионал“ и објаснили да нуди стандардизовани метод представљања опционих вредности, укидајући захтев за нултим референцама и побољшавајући јасноћу и безбедност кода. Сазнали смо да то такође побољшава способност да се објасне компликовани проблеми и да се са грешкама носите са љубазношћу.