如何将boost :: optional设置回未初始化状态?

Guy*_*ton 53 c++ boost boost-optional

我如何"重置"/"取消设置" boost::optional

optional<int> x;

if( x )
{
  // We won't hit this since x is uninitialized
}
x = 3;
if( x )
{
  // Now we will hit this since x has been initialized
}
// What should I do here to bring x back to uninitialized state?
if( x )
{
  // I don't want to hit this
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*ley 95

x = boost::none;
Run Code Online (Sandbox Code Playgroud)

  • [引证需要] _(这就是为什么你"有"逃避答案中字符的最低限制.)_ (3认同)
  • 更多详细信息:http://www.boost.org/doc/libs/1_60_0/libs/optional/doc/html/optional/reference.html#boost_optional.reference.header__boost_none_hpp_ (2认同)

Naw*_*waz 12

一个简单的方法是:

x = optional<int>(); //reset to default
Run Code Online (Sandbox Code Playgroud)

或者干脆:

x.reset(); 
Run Code Online (Sandbox Code Playgroud)

它会破坏当前值,使其保持未初始化状态(默认值).

  • [`reset()`已弃用](http://www.boost.org/doc/libs/1_44_0/libs/optional/doc/html/boost_optional/synopsis.html) (14认同)
  • 这是[更具体的链接](http://www.boost.org/doc/libs/1_48_0/libs/optional/doc/html/boost_optional/detailed_semantics.html#reference_optional_reset).基本上,本杰明的答案是新的`.reset();`. (2认同)
  • `optional <T> :: reset();`使用简单,使用错误,所以为什么要弃用呢?(引自Scott Meyers的着名指南) (2认同)