std :: make_pair vs C ++ 0x uniform initializer

时间:2011-03-13 15:47:22

标签: c++ c++11 uniform-initialization

使用后者有缺点吗? std::make_pair是多功能/兼容还是真正可以互换?

谢谢!

1 个答案:

答案 0 :(得分:6)

他们是如何相关的?使用初始化列表构造函数对于一对不起作用,因为pair是非异类型的,而初始化列表构造函数使用initializer_list<T>,它只能用于检索均匀类型化的初始化列表。

(查看规范,它应该被称为“初始化列表构造函数”,而不是“初始化列表构造函数”。你真的想要引用第一个吗?如果没有,你指的是什么?)。

如果您只是使用初始化列表初始化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可能更容易,这将适当地衰减表达式的类型。