【问题标题】:Is sharing data with initializer list out-scoped valid in standard?与初始化列表共享数据是否在标准范围内有效?
【发布时间】:2021-09-17 04:41:03
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ c++11 initializer-list


    【解决方案1】:

    此代码似乎无效。这是来自cppreference的一些相关摘录

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 2012-06-19
      相关资源
      最近更新 更多