std::optional<T>::reset
From ru.cppreference.net
void reset() noexcept;
|
(начиная с C++17) (constexpr начиная с C++20) |
|
Если *this содержит значение, уничтожает это значение, как если бы вызовом value().T::~T(). В противном случае эффектов нет.
*this не содержит значение после этого вызова.
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_optional
|
202106L
|
(C++20)
(DR20) |
Полностью constexpr |
Пример
Запустить этот код
#include <iostream> #include <optional> struct A { std::string s; A(std::string str) : s(std::move(str)) { std::cout << " constructed\n"; } ~A() { std::cout << " destructed\n"; } A(const A& o) : s(o.s) { std::cout << " copy constructed\n"; } A(A&& o) : s(std::move(o.s)) { std::cout << " move constructed\n"; } A& operator=(const A& other) { s = other.s; std::cout << " copy assigned\n"; return *this; } A& operator=(A&& other) { s = std::move(other.s); std::cout << " move assigned\n"; return *this; } }; int main() { std::cout << "Create empty optional:\n"; std::optional<A> opt; std::cout << "Construct and assign value:\n"; opt = A("Lorem ipsum dolor sit amet, consectetur adipiscing elit nec."); std::cout << "Reset optional:\n"; opt.reset(); std::cout << "End example\n"; }
Вывод:
Create empty optional: Construct and assign value: constructed move constructed destructed Reset optional: destructed End example
Отчёты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P2231R1 | C++20 |
reset
was not constexpr while non-trivial destruction is allowed in
constexpr
in C++20
|
made constexpr |
Смотрите также
|
присваивает содержимое
(публичная функция-член) |