如何将大括号初始值设定项用于动态大小数组和新数组?

How to use curly bracket initializer for a dynamically size array and new?

本文关键字:数组 小数 动态 新数组 用于      更新时间:2023-10-16

我有一个float*的"数组"(不确定这是否是正确的术语(,我正在传递给另一个函数。通常,我会做float *array = new float[6];但是现在我正在输入一些临时代码,所以我想立即设置所有值。有没有办法我可以做这样的事情:

float *array = new float[] { 1, 2, 3, 4, 5, 6 };

让它推断出大小,所以我不必这样做:

float *array = new float[6];
array[0] = 1;
array[1] = 2;
...

此语法仅在 20 C++有效。否则,您必须指定数组的大小:

// error C++17, ok C++20
float *array = new float[] { 1, 2, 3, 4, 5, 6 };
// ok, any C++ version
float *array = new float[6] { 1, 2, 3, 4, 5, 6 };

当然,首选方法是对动态大小的列表使用std::vector

auto my_vec = std::vector<float>{1, 2, 3, 4, 5, 6};

如果大小是静态的,则始终首选std::array

// C++17 syntax
auto my_array = std::array{1.f, 2.f, 3.f, 4.f, 5.f, 6.f};
// C++14 syntax
auto my_array = std::array<float, 6>{1, 2, 3, 4, 5, 6};
// can't push back into 'my_array'