gpt4 book ai didi

c++ - 可以构造一个空的 std::optional 调用 T 的默认构造函数吗?

转载 作者:行者123 更新时间:2023-12-03 10:05:48 27 4
gpt4 key购买 nike

该对象是否存储在 std::optional<T> 的实例中?保证在放置时就地初始化 new ?这是我对大多数实现的期望,但是,我也可以想象以下实现:

/* pseudocode */
template<typename T> class optional {
T object;
bool has_value;
};
在这种情况下,在构建 std::optional<T> 时不包含值, T的默认构造函数必须被调用。
能不能保证不是这样的, 即使 T确实有默认构造函数,它不会被调用 ?
我在 cppreference 上找到的与内存管理相关的所有内容如下:“如果一个可选项包含一个值,则保证该值作为可选对象占用空间的一部分进行分配,即永远不会发生动态内存分配。” ( https://en.cppreference.com/w/cpp/utility/optional )
不过,我上面的“实现”也符合这个要求。

最佳答案

该标准要求 std::optional<T>由其默认构造函数或其 std::nullopt_t 初始化构造函数未初始化其包含的 T目的。
来自 [optional.ctor] (强调我的):

constexpr optional() noexcept;
constexpr optional(nullopt_t) noexcept;
    Postconditions: *this does not contain a value.
    Remarks: No contained value is initialized. For every object type T these constructors are constexpr constructors ([dcl.constexpr]).

关于c++ - 可以构造一个空的 std::optional<T> 调用 T 的默认构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65579992/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com