std::optional<T>::reset
来自cppreference.com
<tbody>
</tbody>
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 << " 已构造\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++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| P2231R1 | C++20 | reset 不是 constexpr 而 C++20 中允许非平凡析构在 constexpr 中
|
使之为 constexpr
|
参阅
| 对内容赋值 (公开成员函数) |