C ++ 11变量类型,它的作用类似于文字初始化列表?

时间:2014-01-06 16:47:58

标签: c++11 initializer-list

表达式{"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

编辑:我无法使abcabc中的任何一个使用字符串,因为它们是运行时构造的,这不起作用对于我的情况。

1 个答案:

答案 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));