答案 0 :(得分:8)
您不能嵌套初始化列表以扩展它们,也不能添加/连接它们。它们只是访问编译时大小数组的一些语法糖。即使复制initializer_lists也不会复制其项目。最重要的是,这意味着你不能使用重复的返回值!函数返回时,引用的数组将被销毁,根据N3290中的8.5.4p6:
数组的生命周期与initializer_list对象的生命周期相同。
(在return语句中创建临时,然后按值返回。即使发生复制省略,复制的所有其他语义也不会改变。)
比较,例如,在这里创建的临时initializer_list,然后传递给ctor并在初始化对象后销毁,在同一点上同一个完整表达式中的所有其他临时对象(如果有的话)将被摧毁:
vector<string> v {"foo"};
使用vector的方法插入N个副本,而不是操作初始化列表:
v.insert(v.end(), 3, "bar");