C+;+;构造函数与相同键/值类型的std::map
不明确这里有一个类定义作为示例。#includegt;#includegt;templategt;class Collection{private:std::mapgt;data;public:Collection(){}Collection(std
解答动态
这是一张有趣的地图。
A地图可以由两张地图组成迭代器:
templategt;map(InputIterator first,InputIterator last,const Compareamp;=Allocator()); 值得注意的是,检查InputIterator是否是迭代器根本不需要此构造函数,更不用说取消引用的结果可以转换为映射的值类型。当然,实际上尝试构造映射会失败,但是要重载解析,可以从同一类型的任意两个参数构造映射。
So with
collectiongt;col({{keyquot;valuelt;标准:stringquot;,quot;}}; 标准中有一条特殊规则排除了第二种解释。
在本例中,您缺少一个{}来封闭映射{keyquot;value";}}
EDIT:抱歉,由于声誉不足,我不能对t.C的答案发表评论。无论如何,感谢您出色地强调了歧义点。
I想补充他们的答案-给出一个完整的图片,为什么用{}构造不会导致这种歧义,但用()构造会导致这种歧义。
括号和圆括号初始化之间的关键区别是在构造函数重载解析期间,如果可能的话,带括号的初始值设定项与std::initializer\u list参数匹配,即使其他构造函数提供更好的匹配。这就是为什么用{}构造可以解决歧义的原因。这是从Scott Myers的“有效的现代C++”项目
中获得的。- End
免责声明:
本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。