C++ 我可以安全地指向重新分配的boost::optional的数据吗?

C++ 我可以安全地指向重新分配的boost::optional的数据吗?,c++,boost,boost-optional,C++,Boost,Boost Optional,给定以下代码示例: boost::optional< int > opt; opt = 12; int* p( &*opt ); opt = 24; assert( p == &*opt ); boost::可选opt; opt=12; int*p(&*opt); opt=24; 断言(p==&*opt); 是否可以保证断言始终有效?是的,这是一种保证。boost::optional的T在逻辑上是optional的私有成员 上述代码在逻辑上等同于: bool op

给定以下代码示例:

boost::optional< int > opt;
opt = 12;
int* p( &*opt );
opt = 24;
assert( p == &*opt );
boost::可选opt;
opt=12;
int*p(&*opt);
opt=24;
断言(p==&*opt);

是否可以保证断言始终有效?

是的,这是一种保证。
boost::optional的
T
在逻辑上是optional的私有成员

上述代码在逻辑上等同于:

bool opt_constructed = false;
int opt_i; // not constructed

new int (&opt_i)(12); opt_constructed = true; // in-place constructed

int*p = &opt_i;

opt_i = 24;

assert(p == &opt_i);

// destuctor
if (opt_constructed) {
  // call opt_i's destructor if it has one
}

文档说明了什么?我在文档中没有找到答案,但可能没有找到。旁注:只要指针在使用中,可选的就不能更改其内部状态(可选=boost::none将是致命的).
*opt
返回对内部成员的引用,或在未构造内部成员时引发异常
opt=24
分配给已构造的成员。忽略我。我没有思考。你能指出文档中支持你答案的部分吗?参见语义叙述。注意,一个optional在语义上等同于T,加上可以不初始化。