7

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

谢谢!

4

1 回答 1

8

它们有什么关系?使用初始化列表构造函数对 pair 不起作用,因为 apair是异构类型的,而初始化列表构造函数使用 a initializer_list<T>,它仅可用于检索同构类型的初始化列表。

(查看规范,它真的应该被称为“initializer-list constructor”,而不是“initializer list constructor”。你真的是指第一个吗?如果不是,你指的是什么?)。

如果您只是参考using和 usingstd::pair<>的初始化列表来初始化 a ,我认为两者都可以。std::make_pairauto

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

如果您已经有了这些类型A并且B可以将它们用于pair,那么初始化列表是一个很好的使用方法。如果你没有,那make_pair可能是一件好事。如果您有类型Aand B,但不确定它们是否已经正确转换(即它们不应该是数组或函数类型,并且您可能还希望它们是非引用类型),那么它可能更容易使用std::make_pair,这将适当地衰减表达式的类型。

于 2011-03-13T15:53:33.467 回答