std::optional<T>::reset
From cppreference.com
| void reset() noexcept; |
(C++17以降) (C++20 以降 constexpr) |
|
もし *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 | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| P2231R1 | C++20 | C++20 では非自明な破壊が `constexpr` で許可されているにもかかわらず、`reset` は `constexpr` ではありませんでした。 | constexprではありませんでした。 |
[編集] 関連項目
| 内容を代入する (public member function) |