Пространства имён
Варианты
Действия

std::optional<T>::reset

Материал из cppreference.com
< cpp‎ | utility‎ | optional
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования(C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
std::optional
Функции-элементы
Наблюдатели
Монадические операции
Модификаторы
optional::reset
Функции, не являющиеся элементами
Правила вывода
Вспомогательные классы
Вспомогательные объекты
 
void reset()noexcept;
(начиная с C++17)
(до C++20)
constexprvoid reset()noexcept;
(начиная с C++20)

Если *this содержит значение, уничтожает это значение, как будто с помощью value().T::~T(). Иначе не имеет эффектов.

*this не содержит значения после этого вызова.

[править]Пример

#include <optional>#include <iostream>   struct A {std::string s; A(std::string str): s(std::move(str)){std::cout<<" создан\n";} ~A(){std::cout<<" разрушен\n";} A(const A& o): s(o.s){std::cout<<" создан копированием\n";} A(A&& o): s(std::move(o.s)){std::cout<<" создан перемещением\n";} A& operator=(const A& other){ s = other.s;std::cout<<" присваивание копированием\n";return*this;} A& operator=(A&& other){ s = std::move(other.s);std::cout<<" присваивание перемещением\n";return*this;}};   int main(){std::cout<<"Создание пустого optional:\n";std::optional<A> opt;   std::cout<<"Создание и присваивание значения:\n"; opt = A("Lorem ipsum dolor sit amet, consectetur adipiscing elit nec.");   std::cout<<"Сброс optional:\n"; opt.reset();std::cout<<"Конец примера\n";}

Вывод:

Создание пустого optional: Создание и присваивание значения: создан создан перемещением разрушен Сброс optional: разрушен Конец примера

[править]Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
WG не указан C++20 reset не была constexpr, в то время как нетривиальное уничтожение
разрешено в constexpr в C++20
сделана constexpr

[править]Смотрите также

присваивает содержимое
(public функция-элемент)[править]
close