C++ 当std::optional声明为局部变量且未显式初始化时,是否将其设置为std::nullopt?

C++ 当std::optional声明为局部变量且未显式初始化时,是否将其设置为std::nullopt?,c++,stl,stdoptional,C++,Stl,Stdoptional,当int在本地声明(但未初始化或分配给)时,它的值未定义。当本地声明std::optional而没有显式初始化时,是否也适用同样的情况?它总是std::nullopt,还是具有未定义的值?来自forstd::optional构造函数: constexpr optional()noexcept constexpr可选(std::nullopt_t)无例外 构造不包含值的对象 因此,是的,默认初始化的std::optional没有值,但它不是不确定的。来自forstd::optional构造函数:

int
在本地声明(但未初始化或分配给)时,它的值未定义。当本地声明
std::optional
而没有显式初始化时,是否也适用同样的情况?它总是
std::nullopt
,还是具有未定义的值?

来自for
std::optional
构造函数:

constexpr optional()noexcept

constexpr可选(std::nullopt_t)无例外

构造不包含值的对象

因此,是的,默认初始化的
std::optional
没有值,但它不是不确定的。

来自for
std::optional
构造函数:

constexpr optional()noexcept

constexpr可选(std::nullopt_t)无例外

构造不包含值的对象


因此,是的,默认初始化的
std::optional
没有值,但它不是不确定的。

related/dupe:related/dupe:在本地声明对象但未初始化时是否调用构造函数?是,声明
optional
对象会调用构造函数。我的解释是,本地声明的
int
不会被默认初始化,但是本地声明的
std::optional
将通过调用默认构造函数被默认初始化。这是否正确?是的,未初始化的
int
具有不确定的值。请注意,这仍然是int的默认初始化,只是默认初始化会给int留下一个不确定的值。@jhourback一个
int
声明为
inti
是默认初始化的,只是
int
s没有构造函数,在这种情况下,“默认初始化”表示“具有不确定值”<另一方面,code>std::optional
确实有一个默认构造函数,将对象初始化为
std::nullopt
的值。就像std::string的默认构造函数一样,将对象初始化为空字符串。默认初始化与零初始化不同。当对象在本地声明但未初始化时是否调用构造函数?是的,声明
可选的
对象确实调用构造函数。我的解释是,在本地声明的
int
将不会被默认初始化,但是本地声明的
std::optional
将通过调用默认构造函数进行默认初始化。这是否正确?是的,未初始化的
int
具有不确定的值。请注意,这仍然是int的默认初始化,只是默认初始化会给int留下一个不确定的值。@jhourback一个
int
声明为
inti
是默认初始化的,只是
int
s没有构造函数,在这种情况下,“默认初始化”表示“具有不确定值”<另一方面,code>std::optional
确实有一个默认构造函数,将对象初始化为
std::nullopt
的值。就像std::string的默认构造函数一样,将对象初始化为空字符串。默认初始化与零初始化不同。