C++ 标准:制造U对vs C++;11统一初始值设定项

C++ 标准:制造U对vs C++;11统一初始值设定项,c++,c++11,uniform-initialization,C++,C++11,Uniform Initialization,使用后者有缺点吗?std::使双绞线更通用/兼容,还是它们真的可以互换 谢谢 它们之间有什么关系?使用初始值设定项列表构造函数不适用于对,因为对是异构类型的,而初始值设定项列表构造函数使用初始值设定项列表,它仅可用于检索异构类型的初始值设定项列表 (查看规范,它应该真正被称为“初始值设定项列表构造函数”,而不是“初始值设定项列表构造函数”。你真的想引用第一个吗?如果不是,你指的是什么?) 如果您只提到使用初始化器列表初始化std::pair,而不是使用std::make\u pair和使用aut

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


谢谢

它们之间有什么关系?使用初始值设定项列表构造函数不适用于对,因为
是异构类型的,而初始值设定项列表构造函数使用
初始值设定项列表
,它仅可用于检索异构类型的初始值设定项列表

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

如果您只提到使用初始化器列表初始化
std::pair
,而不是使用
std::make\u pair
和使用
auto
,我认为两者都可以

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

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

世界不同意你的观点:不久前我自己问了这个问题,并在GCC中成功地使用了这个解决方案。如果这是不允许的,我认为这将是标准中的一个严重缺陷…@rubenvb,代码显示的不是“初始值设定项列表构造函数”。这是一个“列表初始化”。我想你也可以说“一个使用初始值设定项列表的构造”之类的话,也许可以用一个例子来说明你的意思。如前所述,问题倾向于
对(初始值设定项列表)
,这对对对来说并不真正有意义。好的,更正确的术语应该是“统一初始值设定项”。将编辑。难道没有我需要担心的
const
gotcha吗?(我记得
std::make_pair
解决了
std::map
的常量问题)@rubenvb,是的,如果您想创建一对非常量类型,那么您也可以使用
make_pair
。有时候你可能想要成对的常量元素。@rubenvb:我不认为是
make\u pair
可以解决任何问题。它是pair的构造函数:
std::pair p=std::pair(1,2)在回答指出你在措辞上犯了错误后更改问题-这是低级趣味。最好打开一个新问题(这个问题最初是关于@litb的答案中所示的
initializer\u list
)。