表达式{"a", "b"}
似乎允许隐式转换为string
s的容器,但如果我首先将其分配给变量,则转换似乎是不允许的。有没有办法解决这个问题?
const char a[] = "a";
const char b[] = "b";
const char c[] = "c";
// Works
set<string> s1{a, b, c};
s1 = {a,b,c};
const auto abc = {a, b, c};
// no matching function for call ...
set<string> s2(abc);
s2 = abc;
示例代码和错误消息here:
编辑:我无法使a
,b
,c
或abc
中的任何一个使用字符串,因为它们是运行时构造的,这不起作用对于我的情况。
答案 0 :(得分:4)
const auto
推断初始值设定项列表的类型为const initializer_list<const char *>
,无法隐式转换为initializer_list<string>
,这是构建set
所需的内容使用initializer_list
构造函数。只需明确注释类型,它就可以工作:
initializer_list<string> abc = {a, b, c};
// works now
set<string> s2(abc);
编辑:如果由于某种原因你真的不能使用initializer_list<string>
(为什么?),只需使用迭代器构造函数而不是intializer_list
构造函数:
const auto abc = {a, b, c};
// also works
set<string> s2(begin(abc), end(abc));