cppreference 显示以下定义std::in_place_t
:
struct in_place_t {
explicit in_place_t() = default;
};
inline constexpr std::in_place_t in_place{};
为什么他们添加了一个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()