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

Mar*_*hrs 7 c++ explicit std explicit-constructor defaulted-functions

cppreference显示以下定义std::in_place_t

struct in_place_t {
    explicit in_place_t() = default;
};
inline constexpr std::in_place_t in_place{};
Run Code Online (Sandbox Code Playgroud)

他们为什么要添加一个explicit默认的构造函数?为什么不排除它?有什么好处?

Cal*_*eth 4

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

考虑以下结构

std::optional<DefaultConstructible> dc1({}); // dc1 == std::nullopt
std::optional<DefaultConstructible> dc2(std::in_place); // dc2 == DefaultConstructible()
Run Code Online (Sandbox Code Playgroud)