问题:
根据 C 标准,当一个函数返回一个初始化列表,其底层数组的生命周期是否应该延伸到调用函数中?
C 标准规定 std::initializer_list 对象的生命周期与其初始化的对象相同。当函数返回初始化列表时,它会初始化返回值对象。然而,涉及到初始化列表的两个实例:函数中的一个和调用代码中的一个。
标准中的示例表明数组的生命周期延伸到复制到的对象,这意味着返回值的数组也应该在调用函数中保留。然而,实际情况并非如此。
答案:
目前,std::initializer_list 返回值的生命周期行为在C 标准。不同的编译器以不同的方式实现它:
总之,目前不可能依赖 std:: 的生命周期initializer_list 返回值扩展到调用函数中。避免使用 std::initializer_list 传递值,因为它可能会导致意外行为。
附加说明:
DR 1290 修改了标准的措辞,并且DR 1565 和 1599 仍处于开放状态,解决了相关问题。然而,语义仍在定义中,编译器需要时间来实现最终的更改。
以上是`std::initializer_list` 返回值的生命周期是否延伸到调用函数中?的详细内容。更多信息请关注PHP中文网其他相关文章!