cppreference显示了std::in_place_t
的以下定义:
struct in_place_t {
explicit in_place_t() = default;
};
inline constexpr std::in_place_t in_place{};
为什么他们添加了explicit
和默认构造函数?为什么不被遗漏?有什么好处?
你希望这样的类型只是explicit
ly可构造的,因为它存在表示特定类型的构造函数重载,在可能合理地找到{}
的地方。
考虑以下结构
std::optional<DefaultConstructible> dc1({}); // dc1 == std::nullopt
std::optional<DefaultConstructible> dc2(std::in_place); // dc2 == DefaultConstructible()
如果你省略构造函数,它将不会是explicit
。如果你不= default
它不会是微不足道的。
所以,如果你想让构造函数成为explicit
并且你也希望它保持微不足道,那么你看到的是唯一可用的选项。