C ++ 0x嵌套初始化列表

时间:2011-04-30 09:21:30

标签: c++ c++11 initializer-list template-meta-programming

1 个答案:

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