🍴 Что происходит при копировании std::array?
Казалось бы, простой вопрос. Но копирование array работает совсем не так, как у vector.
Проблема: в C++ массивы не копируются обычным =. Но std::array копируется. Как?
⚡️ Ключевое отличие: std::array — это агрегатный тип, а агрегаты копируются поэлементно.
std::array a = {1, 2, 3};
std::array b = a; // Копируются ВСЕ элементы!
Под капотом компилятор генерирует:
b._data[0] = a._data[0];
b._data[1] = a._data[1];
b._data[2] = a._data[2];
❗️ Важно: это происходит на этапе компиляции. Для array будет сгенерировано 1000 операций присваивания. Или одна memcpy, если компилятор умный.
❌ Ловушка: копирование большого array может быть дорогим. В отличие от vector (копируется только указатель при move), array всегда копирует данные целиком.
Практический вывод: передавайте большие array по ссылке (const std::array&), иначе каждый вызов функции скопирует все N элементов.
Библиотека C/C++ разработчика
#под_капотом