如何将 std::map::operator= 与初始化列表一起使用
How to use std::map::operator= with initializer lists
我问了关于 boost::assign::map_list_of
的相同问题 before(没有得到回答),然后我想也许使用大括号初始化会有帮助,但没有。
这非常有效:
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 帖子:
- Initializing map of maps with initializer list in VS 2013
- Is this a compiler bug? Am I doing something wrong?
我问了关于 boost::assign::map_list_of
的相同问题 before(没有得到回答),然后我想也许使用大括号初始化会有帮助,但没有。
这非常有效:
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 帖子:
- Initializing map of maps with initializer list in VS 2013
- Is this a compiler bug? Am I doing something wrong?