std::optional<T>::reset
来自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<<" 已构造\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 |
[编辑]参阅
对内容赋值 (公开成员函数) |