C+;+;構(gòu)造函數(shù)與相同鍵/值類型的std::map
不明確這里有一個(gè)類定義作為示例。#includegt;#includegt;templategt;class Collection{private:std::mapgt;data;public:Collection(){}Collection(std
解答動(dòng)態(tài)
這是一張有趣的地圖。
A地圖可以由兩張地圖組成迭代器:
templategt;map(InputIterator first,InputIterator last,const Compareamp;=Allocator()); 值得注意的是,檢查InputIterator是否是迭代器根本不需要此構(gòu)造函數(shù),更不用說取消引用的結(jié)果可以轉(zhuǎn)換為映射的值類型。當(dāng)然,實(shí)際上嘗試構(gòu)造映射會(huì)失敗,但是要重載解析,可以從同一類型的任意兩個(gè)參數(shù)構(gòu)造映射。
So with
collectiongt;col({{keyquot;valuelt;標(biāo)準(zhǔn):stringquot;,quot;}}; 標(biāo)準(zhǔn)中有一條特殊規(guī)則排除了第二種解釋。
在本例中,您缺少一個(gè){}來封閉映射{keyquot;value";}}
EDIT:抱歉,由于聲譽(yù)不足,我不能對t.C的答案發(fā)表評論。無論如何,感謝您出色地強(qiáng)調(diào)了歧義點(diǎn)。
I想補(bǔ)充他們的答案-給出一個(gè)完整的圖片,為什么用{}構(gòu)造不會(huì)導(dǎo)致這種歧義,但用()構(gòu)造會(huì)導(dǎo)致這種歧義。
括號(hào)和圓括號(hào)初始化之間的關(guān)鍵區(qū)別是在構(gòu)造函數(shù)重載解析期間,如果可能的話,帶括號(hào)的初始值設(shè)定項(xiàng)與std::initializer\u list參數(shù)匹配,即使其他構(gòu)造函數(shù)提供更好的匹配。這就是為什么用{}構(gòu)造可以解決歧義的原因。這是從Scott Myers的“有效的現(xiàn)代C++”項(xiàng)目
中獲得的。- End
免責(zé)聲明:
本頁內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負(fù)責(zé),概與琴島網(wǎng)公司無關(guān)。本頁內(nèi)容僅供參考,請您根據(jù)自身實(shí)際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項(xiàng),請咨詢專業(yè)人士處理。