簡體   English   中英

如何使用std :: map :: operator =和初始化列表

[英]How to use std::map::operator= with initializer lists

關於boost::assign::map_list_of 之前我問了同樣的問題(沒有得到答案),然后我想也許使用大括號初始化會有所幫助,但事實並非如此。

這非常有效:

std::map<int, char> m = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};

但這不是:

std::map<int, char> m;
m = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};

Visual Studio 2013給出錯誤error C2593: 'operator =' is ambiguous ,可以是operator=(std::initalizer_list)operator=(std::map&&)

有可能讓第二個版本工作嗎? 例如,對於m是成員變量的情況。

您可以構造一個臨時的並在賦值中使用它。

std::map<int, char> m;
m = std::map<int, char>{{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};

如果您不想重復該類型,可以使用decltype

std::map<int, char> m;
m = decltype(m){{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};

相關SO帖子:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM