std::optional<T>::reset
Материал из cppreference.com
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 функция-элемент) |