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

jho*_*ack 2 c++ stl stdoptional

当 anint被本地声明(但未初始化或赋值)时,它的值是未定义的。当std::optional<int>在本地声明而没有显式初始化时,是否同样适用?它总是std::nullopt,还是具有未定义的值?

cig*_*ien 5

来自构造函数的参考std::optional

constexpr optional() noexcept;

constexpr optional( std::nullopt_t ) noexcept;

构造一个不包含值的对象。

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

  • 我的解释是,本地声明的“int”不会被默认初始化,但是本地声明的“std::Optional”将通过调用默认构造函数来默认初始化。它是否正确? (2认同)
  • 是的,未初始化的“int”具有不确定的值。请注意,这仍然是 int 的默认初始化,只是默认初始化使 int 具有不确定的值。 (2认同)
  • @jhourback 声明为“int i;”的“int”*是*默认初始化的,只是“int”没有构造函数,在这种情况下“默认初始化”意味着“具有不确定的值”。另一方面,“std::Optional”*确实*有一个默认构造函数,该构造函数将对象初始化为“std::nullopt”的值。就像 `std::string` 的默认构造函数将对象初始化为空字符串一样。默认初始化*不*与*零初始化*相同。 (2认同)