Это нормально, но обратите внимание, что последний такой же, как int* data
, который является указателем, а не массивом.
Массивы не подлежат копированию и должны передаваться по ссылке:
typedef int array_type[5];
IntList(const array_type& arr); // same as: IntList(const int (&arr)[5]);
Вы также можете взять массив любого размера, используя шаблоны:
template <std::size_t N>
IntList(const int (&arr)[N]); // N is the number of elements
Но ваш подход в конечном итоге неортодоксален. Если вы хотите инициализировать с диапазоном данных, используйте итераторы:
template <typename InputIterator>
IntList(InputIterator begin, InputIterator end);
Теперь вы можете выполнять итерации от begin
до end
, которые могут быть итераторами из любого типа контейнера, например массивов, std::vector
, std::map
и т. Д.
Но вы все равно должны использовать std::vector<int>
вместо IntList
.