gpt4 book ai didi

c++ - 无法使用 std::initializer_list 调用新运算符进行列表初始化?

转载 作者:行者123 更新时间:2023-11-30 01:50:15 26 4
gpt4 key购买 nike

因此,在 C++11 中,我们得到了一种新形式的 operator new:

auto dynamicArray = new int[5]{1, 2, 3, 4, 5};

所谓的“列表初始化”格式。

我的问题是是否可以使用 std::initializer_list 调用这种形式的新运算符,如:

std::initializer_list<int> initializer = {1, 2, 3, 4, 5};
auto dynamicArray = new int[5] initializer; //Doesn't work

包装 initializer在大括号中也不起作用(从 std::initializer_list<int>int 的转换)。添加括号似乎也没有帮助。

我知道可以使用可变参数模板来创建类似的效果(并避免完全使用 std::initializer_list),但我更愿意避免使用此解决方案,因为转发引用在重载解析时会带来一些乐趣我正在使用它的功能。

我也知道我可以使用 std::mallocstd::free获取未初始化的内存并自己填充 std::uninitialized_copy .

最佳答案

不,这是不可能的。 new 遵循直接初始化的规则。直接用括号初始化数组是错误的。您只能使用大括号直接初始化数组。接下来是列表初始化。由于它是一个聚合,因此它会执行聚合初始化,聚合初始化中没有任何东西允许您像那样复制 std::initializer_list 的元素。

auto a = new int[5](); 是有效的,因为规则声明 () 执行值初始化,否则它格式错误。

关于c++ - 无法使用 std::initializer_list 调用新运算符进行列表初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27663623/

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