3

我之前问过同样的问题(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成员变量的情况。

4

1 回答 1

3

您可以构建一个临时的并在作业中使用它。

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帖子:

于 2016-11-16T17:33:06.423 回答