Red*_*oft 4 c++ lifetime language-lawyer
在std::initializer_list
以列表中的元素复制到另一个容器主要用作类构造/功能参数.但是如何使用创建全局对象std::initializer_list
呢?例如:
struct ElemType {
const char* name;
bool flag;
};
std::initializer_list<ElemType> MyGlobalData = { {"One",true}, {"Two",false} };
Run Code Online (Sandbox Code Playgroud)
如果要查看std::initializer_list
模板定义(在Visual Studio 2017中检查),它只包含2个数据成员:const _Elem *_First
和_Last
.这意味着初始化列表数据应存储在自动变量中.在这种情况下它的寿命是多少?
在Visual Studio 2017中测试的此类示例看起来效果很好.但我怀疑这种行为是否符合最新的C++标准.
它定义明确.
[dcl.init.list]/5类型的对象
std::initializer_list<E>
是从初始化列表构造的,就好像实现生成并实现了(7.4)类型为"array ofN
const E
" 的prvalue ,其中N
是初始化列表中的元素数.[dcl.init.list]/6该数组的生命周期与任何其他临时对象(15.2)相同,只是
initializer_list
从数组初始化对象会延长数组的生命周期,就像绑定对临时对象的引用一样.
强调我的.
归档时间: |
|
查看次数: |
203 次 |
最近记录: |