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

rub*_*nvb 5 c++ uniform-initialization c++11

使用后者有缺点吗?是std::make_pair更通用/兼容或者是他们真正的互换?

谢谢!

Joh*_*itb 6

它们有什么关系?使用初始化列表构造函数对于一对不起作用,因为a pair是异构类型的,而初始化列表构造函数使用a initializer_list<T>,它只能用于检索均匀类型化的初始化列表.

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

如果你只是提到初始化a std::pair<>使用初始化列表反对使用std::make_pair和使用auto,我认为两者都很好.

auto p = std::make_pair(a, b);
std::pair<A, B> p{a, b};
Run Code Online (Sandbox Code Playgroud)

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