微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与初始值设定项列表共享数据在标准中是否有效?

如何解决与初始值设定项列表共享数据在标准中是否有效?

lst2 = lst 复制或分配一个 initializer_list 不会复制列表中的元素。复制之后,原件和副本共享元素。

根据C++ Primer Table 6.1,分配一个初始化列表将共享数据,但如果初始化列表与另一个范围外共享,例如,下面的代码函数的一部分

std::initializer_list<int> lst1;
{
    std::initializer_list<int> lst2 = {1,2,3};
    lst1 = lst2;
}

似乎初始值设定项列表可能共享文字的数据,但是标准中指定的数组文字的生命周期是多少?这个代码安全吗?

解决方法

此代码似乎无效。以下是来自 cppreference

的一些相关摘录

底层数组是一个const T[N]类型的临时数组,其中 每个元素都被复制初始化(除了缩小转换 无效)来自原始的相应元素 初始化列表。底层数组的生命周期与 任何其他临时对象,除了初始化 数组中的 initializer_list 对象延长了数组的生命周期 数组完全像将引用绑定到临时对象(具有相同的 异常,例如初始化非静态类成员)。

退出内部作用域后,临时底层数组将被销毁 - 随着内部 lst2 的生命周期结束 - 来自封闭作用域的 lst1 将以悬空指针结束。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。