Czy istnieje jakiś bezpieczny i standardowy, zgodny sposób traktowania tablicy w stylu C jako tablicy std :: bez kopiowania danych do nowej tablicy std ::?Traktuj tablicę Cstyle jako std :: array
To oczywiście nie kompiluje, ale jest efektem, którego chciałbym (moje rzeczywiste użycie jest bardziej skomplikowane, ale ta krótka próbka powinna pokazać, co chciałbym zrobić). Domyślam się, że reinterpret_cast będzie "działał", ale prawdopodobnie nie jest bezpieczny?
#include <array>
int main()
{
int data[] = {1, 2, 3, 4, 5};
// This next line is the important one, treating an existing array as a std::array
std::array<int, 5>& a = data;
}
Wydaje się, że powinno być możliwe, ponieważ dane powinny być przechowywane identycznie.
edit: Aby być jasne, nie chcę, aby wyczyścić nową tablicę std ::, chcę odnieść się do istniejących danych jako jeden.
kontenery STL zarządzania własną pamięć. Nie można utworzyć tablicy i zarządzać nią za pomocą tablicy, która została przydzielona w innym miejscu. – krammer
Biorąc pod uwagę, że 'std :: array' i' std :: vector' oczekują na zarządzanie własną pamięcią, powinieneś być bardzo ostrożny przy używaniu 'reinterpret_cast' bez podejmowania kroków, aby upewnić się, że nie próbują usuwać danych, które nie są pod ich kontrolą. Ale na marginesie ... nie bój się "memcpy". W końcu to dość skuteczna rutyna. – Rook
Ok dzięki. Chcę to zrobić bezpiecznie, a nie hackować, po prostu zastanawiałem się, czy to możliwe, to wszystko :) – jcoder