为什么 std::in_place_t 的构造函数是默认的和显式的?

Why is the constructor of std::in_place_t defaulted and explicit?

cppreference 显示 std::in_place_t 的以下定义:

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

为什么要添加 explicit 和默认构造函数?为什么它没有被排除在外?有什么好处?

如果省略构造函数,它将不会是 explicit。如果你不 = default 它就不会 微不足道

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

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

考虑以下结构

std::optional<DefaultConstructible> dc1({}); // dc1 == std::nullopt
std::optional<DefaultConstructible> dc2(std::in_place); // dc2 == DefaultConstructible()