std::make_pair 与 C++11 统一初始值设定项

发布于 2024-10-21 20:52:17 字数 78 浏览 3 评论 0原文

使用后者有缺点吗? std::make_pair 是否更通用/兼容,或者它们真的可以互换吗?

谢谢!

Is there a drawback to using the latter? Is std::make_pair more versatile/compatible or are they truly interchangeable?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

楠木可依 2024-10-28 20:52:17

它们有何关系?使用初始值设定项列表构造函数不适用于对,因为 pair 是异构类型的,而初始值设定项列表构造函数使用 initializer_list,它只能使用检索同构类型的初始值设定项列表。

(查看规范,它实际上应该被称为“初始化器列表构造函数”,而不是“初始化器列表构造函数”。您真的是指第一个吗?如果不是,您指的是什么呢?)。

如果您只是参考使用初始化列表来初始化 std::pair<>,而不是使用 std::make_pair 和使用 auto,我认为两者都很好。

auto p = std::make_pair(a, b);
std::pair<A, B> p{a, b};

如果您已经拥有类型 AB 并且可以将它们用于 pair,那么初始化器列表是一个很好的使用方法。如果还没有,那么 make_pair 可能是一件好事。如果您有类型 AB,但不确定它们是否已正确转换(即它们不应该是数组或函数类型,并且您可能还需要它们为非引用类型),那么使用 std::make_pair 可能会更容易,它会正确地衰减表达式的类型。

How are they related? Using an initializer list constructor doesn't work for a pair, because a pair is heterogeneously typed, while an initializer list constructor uses an initializer_list<T>, which is only usable to retrieve an homogeneously typed initializer list.

(Looking into the spec, it should really be called "initializer-list constructor", instead of "initializer list constructor". Do you really mean to refer to the first? If not, what do you refer to?).

If you just refer to initialize a std::pair<> using an initializer list against using std::make_pair and using auto, I think both are fine.

auto p = std::make_pair(a, b);
std::pair<A, B> p{a, b};

If you have already the types A and B and can use them for the pair, then the initializer list is a good way to use. If you haven't, then make_pair might be a good thing. If you have types A and B, but aren't sure whether they are already transformed properly (i.e they should not be array or function types, and you probably also want them to be non-reference types), then it might be easier to use std::make_pair, which will properly decay the type of the expressions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文