std::optional<T>::reset

来自cppreference.com
< cpp‎ | utility‎ | optional
 
 
 
 
void reset()noexcept;
(C++17 起)
(C++20 起为 constexpr)

*this 含值,则如同用 value().T::~T() 销毁此值。否则无效果。

*this 在此调用后不含值。

目录

[编辑]注解

功能特性测试标准功能特性
__cpp_lib_optional202106L(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

[编辑]参阅

对内容赋值
(公开成员函数)[编辑]
close