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默认的构造函数?为什么不排除它?有什么好处?
您希望这样的类型只能被explicit构造,因为它的存在是为了在{}可以合理找到的地方表示一种特定类型的构造函数重载。
考虑以下结构
std::optional<DefaultConstructible> dc1({}); // dc1 == std::nullopt
std::optional<DefaultConstructible> dc2(std::in_place); // dc2 == DefaultConstructible()
Run Code Online (Sandbox Code Playgroud)