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

问题描述 投票:7回答:2

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

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

为什么他们添加了explicit和默认构造函数?为什么不被遗漏?有什么好处?

c++ std explicit explicit-constructor defaulted-functions
2个回答
4
投票

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

考虑以下结构

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

4
投票

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

所以,如果你想让构造函数成为explicit并且你也希望它保持微不足道,那么你看到的是唯一可用的选项。

© www.soinside.com 2019 - 2024. All rights reserved.