C++ Std::Необязательно

C Std Neobazatel No



Функция «std::optional» предусмотрена в C++17. «std::optional» обеспечивает типобезопасное представление необязательных значений или выбор значения. Класс шаблона под названием «std::optional» содержит необязательное значение, которое может содержать или не содержать допустимое значение. Это более безопасная замена для представления пустых или необязательных значений, чем необработанные указатели или другие методы. «std::optional» минимизирует возможность ошибок разыменования нулевого указателя, требуя от пользователя явно проверить, существует ли значение, прежде чем его получить.

Пример 1:

В этот код импортируются заголовочные файлы «optional» и «iostream». Мы должны импортировать эти заголовочные файлы, чтобы мы могли легко получить доступ к определенным в них функциям. После этого мы включаем «пространство имен std», чтобы нам не приходилось вводить его с помощью функций отдельно, таких как «std::optional» и «std::cout». Здесь мы используем «пространство имен std». Итак, теперь мы размещаем «optional» или «cout», не вводя вместе с ними «std».

Затем мы вызываем main(), помещаем «optional», устанавливаем для него значение «int» и объявляем «myNum». Это синтаксис объявления переменной «std::optional». Затем мы инициализируем другую переменную с именем «value» и присваиваем значение переменной «myNum», используя функцию value_or(). Мы передаем «99» в эту функцию, поэтому она присваивает это «99» переменной «muNum», если значение отсутствует, и сохраняет его в переменной «value». Затем мы помещаем под ним «cout», который помогает отобразить значение, которое мы присвоили переменной над ним.







Код 1:

#include <необязательно>

#include

использование пространства имен std ;

интервал основной ( ) {

необязательный < интервал > мойNum ;

интервал ценить '=' мойНомер. значение_или ( 99 ) ;

расчет << 'Значение myNum: ' << ценить << конец ;

возвращаться 0 ;

}

Выход:



Здесь мы можем заметить, что отображается «99», что означает, что значения выше не было, и этой переменной присвоено значение, которое мы добавили.







Пример 2:

Сначала мы подключаем файлы заголовков и размещаем «пространство имен std». Теперь под этим мы объявляем функцию «std::optional», которая называется «divideFunc()». «Дивиденд» и «делитель» — два параметра этой функции. Затем мы используем «if» под ним, добавляя условие «делитель != 0». Если это удовлетворено, он возвращает ответ этого деления, поскольку мы добавляем внутрь него слово «возврат». В противном случае он возвращает «nullopt», что означает отсутствие значения безопасного типа. Теперь мы вызываем функцию main(). Чтобы сделать вывод о «std::optional», мы помещаем «divideFunc()», добавляем в него «27, 3» и присваиваем результат переменной «частное».

Здесь мы используем ключевое слово «auto», чтобы оно автоматически настраивало тип данных. После этого мы добавляем «if», где мы используем «имеющее значение», которое определяет, получено ли значение типа. Затем мы помещаем «cout», который отображает результат, хранящийся в переменной «частное», а часть «else» содержит оператор, который отображает, что делитель равен нулю.



Код 2:

#include

#include <необязательно>

использование пространства имен std ;

необязательный < интервал > разделитьFunc ( интервал дивиденды , интервал разделитель ) {

если ( разделитель '=' 0 ) {

возвращаться дивиденды / разделитель ;

}

возвращаться обнулить ;

}

интервал основной ( ) {

авто частное '=' разделитьFunc ( 27 , 3 ) ;

если ( частное. имеет_значение ( ) ) {

расчет << «Фактор:» << частное. ценить ( ) << конец ;

} еще {

расчет << «Здесь делитель равен нулю» << конец ;

}

возвращаться 0 ;

}

Выход:

Вывод отображает результат после деления, что означает, что делитель не равен нулю. В этом случае «std::optional» используется для определения того, существует ли значение или нет с точки зрения типа.

Пример 3:

Здесь мы объявляем переменную «std::optional», которая является «числом» внутри main(). Затем мы используем «if», в котором помещаем функцию has_value() с этой переменной «number». Это проверяет, есть ли значение в этой «числовой» переменной. Если переменная «число» содержит значение, она отображает оператор, который мы добавили после «if». В противном случае он отображает оператор, который мы поместили после «else».

Теперь мы инициализируем «число» значением «92» и снова используем «if» под ним, где функция has_value() добавляется с переменной «число» в «if в качестве условия». Это определяет, имеет ли переменная «число» значение. Предложение, которое мы добавляем после «if», отображается, если переменная «number» имеет значение. Если нет, то отображается оператор, который мы помещаем после «else».

Код 3:

#include

#include <необязательно>

интервал основной ( ) {

стандартный :: необязательный < интервал > число ;

если ( число. имеет_значение ( ) ) {

стандартный :: расчет << 'Номер присутствует: ' << число. ценить ( ) << стандартный :: конец ;

} еще {

стандартный :: расчет << «Номер отсутствует». << стандартный :: конец ;

}

число '=' 92 ;

если ( число. имеет_значение ( ) ) {

стандартный :: расчет << 'Номер присутствует: ' << число. ценить ( ) << стандартный :: конец ;

} еще {

стандартный :: расчет << «Номер отсутствует». << стандартный :: конец ;

}

возвращаться 0 ;

}

Выход:

При этом сначала отображается часть «else», поскольку мы не присваиваем никакого значения переменной «std::optional». Затем мы присваиваем значение этой переменной, чтобы отобразить это значение в следующей строке.

Пример 4:

Теперь мы объявляем три «std::optional» переменных: «n1», «n2» и «n3». Мы также присваиваем значения переменным «n2» и «n3», которые равны «29» и «45» соответственно. Переменная «n1» класса «std::optional» здесь пуста. Теперь мы используем «boolalpha», который помогает возвращать результат в форме «истина» или «ложь», а не «1» и «0».

После этого мы используем операторы отношения между этими переменными «std::optional» и помещаем каждый оператор внутрь «cout», чтобы он также отображал результат добавленного нами сравнения. Сначала он проверяет, что «n3 > n2», затем «n3 < n2», «n1 < n2», «n1 == std::nullopt». Здесь «nullopt» используется для сравнения значения небезопасного типа или нуля. Затем мы проверяем «n2 == 49» и «n3 == 88» внутри оператора «cout» отдельно.

Код 4:

#include <необязательно>

#include

интервал основной ( )

{

стандартный :: необязательный < интервал > n1 ;

стандартный :: необязательный < интервал > n2 ( 29 ) ;

стандартный :: необязательный < интервал > n3 ( Четыре пять ) ;

стандартный :: расчет << стандартный :: буквенно-цифровой ;

стандартный :: расчет << «n3 > n2» << ( n3 > n2 ) << стандартный :: конец ;

стандартный :: расчет << «n3 < n2» << ( n3 < n2 ) << стандартный :: конец ;

стандартный :: расчет << «n1 < n2» << ( n1 < n2 ) << стандартный :: конец ;

стандартный :: расчет << 'N1 == ноль' << ( n1 == стандартный :: обнулить ) << стандартный :: конец ;

стандартный :: расчет << 'N2 == 49' << ( n2 == 29 ) << стандартный :: конец ;

стандартный :: расчет << 'N3 == 88' << ( n3 == 88 ) << стандартный :: конец ;

}

Выход:

Программа C++, о которой мы упоминали ранее, сравнивает различные значения переменных типа «std::optional», одновременно выводя результат на вывод.

Пример 5:

Файлы заголовков, включенные в этот код: «iostream», «fstream», «optional» и «string». «fstream» содержит определения обеих функций — «ofstream» и «ifstream», которые нам нужны в этом коде. Теперь мы включаем «пространство имен std», чтобы не размещать его отдельно для каждой функции. Затем мы используем «std:optional» и объявляем функцию с именем «ReadFileFunc», в которую передаем «const string& f_Name» в качестве аргумента.

Затем у нас есть «ifstream», который помогает прочитать файл, имя которого будет добавлено в переменную «f_name». Затем мы используем «if», в которое включаем условие, говорящее, что если файл не открыт, оно возвращает «nullopt», как мы добавили его под оператором «if». Затем мы создаем еще одну функцию — «fileContent», которая помогает записывать содержимое в файл, если файл открыт. Здесь мы снова помещаем «return fileContent», который также возвращает содержимое, которое мы добавили в файл после открытия.

Теперь мы вызываем здесь функцию «main()», в которой инициализируем переменную «f_Name» именем файла «Sample.txt», который мы хотим открыть. Затем мы вызываем здесь «ReadFileFunc()» и передаем переменную «f_Name» в эту функцию, которая пытается прочитать файл и сохраняет его содержимое в переменной «f_content». При этом мы используем «has_value()» с переменной «f_content» в «if». Если эта переменная содержит значение, она также отображает его, поскольку мы добавили «cout» ниже «if», в котором мы также поместили «f_content». В противном случае отображается ошибка, которую мы добавили после «else».

Код 5:

#include

#include

#include <необязательно>

#include <строка>

использование пространства имен std ;

необязательный < нить > ЧитатьФайлФунк ( константа нить & f_Name ) {

ifstream мой файл ( f_Name ) ;

если ( ! мой файл. открыт ( ) ) {

возвращаться обнулить ;

}

строка fileContent ( ( isstreambuf_iterator < голец > ( мой файл ) ) , isstreambuf_iterator < голец > ( ) ) ;

возвращаться файлСодержание ;

}

интервал основной ( ) {

константа строка f_Name '=' 'Пример.txt' ;

авто f_content '=' ЧитатьФайлФунк ( f_Name ) ;

если ( f_content. имеет_значение ( ) ) {

расчет << «Содержимое файла: \п ' << f_content. ценить ( ) << конец ;

} еще {

серр << «Ошибка: файл здесь не открыт» << f_Name << конец ;

}

возвращаться 0 ;

}

Выход:

Здесь показан оператор ошибки, который мы добавили в часть «else» как результат выполнения данного кода.

Заключение

В этом руководстве мы рассмотрели сильную функцию C++, которая является «std::optional», и объяснили, что она предлагает стандартизированный метод представления необязательных значений, устраняя требование к нулевым ссылкам и повышая ясность и безопасность кода. Мы узнали, что это также улучшает способность объяснять сложные вопросы и изящно справляться с ошибками.