使用后者有缺点吗? std::make_pair
是多功能/兼容还是真正可以互换?
谢谢!
答案 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};
如果您已经有类型A
和B
并且可以将它们用于pair
,则初始化列表是一种很好的使用方式。如果还没有,那么make_pair
可能是件好事。如果您有类型A
和B
,但不确定它们是否已经正确转换(即它们不应该是数组或函数类型,并且您可能还希望它们是非引用类型),然后使用std::make_pair
可能更容易,这将适当地衰减表达式的类型。