gpt4 book ai didi

c++ - 在 lambda 中复制 initializer_list 是否合法?

转载 作者:行者123 更新时间:2023-12-04 12:55:09 24 4
gpt4 key购买 nike

请考虑这个简化的 C++14 程序:

#include <vector>
#include <iostream>

int main()
{
auto l12 = {1,2};
auto copy = []( auto v ) { return v; };
std::vector<int> v{ copy( l12 ) };
std::cout << v[0] << ' ' << v[1] << '\n';
}
GCC 在这里发出警告:
warning: returning local 'initializer_list' variable 'v' does not extend the lifetime of the underlying array [-Winit-list-lifetime]
7 | auto copy = []( auto v ) { return v; };
而其他编译器接受该程序: https://gcc.godbolt.org/z/PPrsWxbfM
请问是程序格式错误还是GCC警告错误?

最佳答案

它格式良好,没有UB。auto l12延长临时数组的生命周期,并使其保持事件状态直到 main 结束. auto v并且 lambda 的返回值不扩展任何东西,但只要 l12 就不是问题活着。

但总的来说,我不建议使用 std::initializer_list由于棘手的生命周期扩展规则,对于函数参数以外的任何东西。

关于c++ - 在 lambda 中复制 initializer_list 是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68404839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com