7

cppreference 显示以下定义std::in_place_t

struct in_place_t {
    explicit in_place_t() = default;
};
inline constexpr std::in_place_t in_place{};

为什么他们添加了一个explicit默认构造函数?为什么它没有被排除在外?有什么好处?

4

2 回答 2

4

如果你省略了构造函数,它不会是explicit. 如果你不这样做= default,它就不会是微不足道的。

因此,如果您希望构造函数是explicit并且还希望它保持微不足道,那么您所看到的就是唯一可用的选项。

于 2019-03-18T16:01:31.953 回答
4

您希望这样的类型只能是可explicit构造的,因为它的存在是为了表示一种特定类型的构造函数重载,在{}可以合理找到的地方。

考虑以下结构

std::optional<DefaultConstructible> dc1({}); // dc1 == std::nullopt
std::optional<DefaultConstructible> dc2(std::in_place); // dc2 == DefaultConstructible()
于 2019-03-18T16:17:08.077 回答