Есть ли какой-либо безопасный и стандартный способ лечения массива стилей C как std :: array без копирования данных в новый std :: array?Обработать C cstyle array как std :: array
Это явно не скомпилирует, но эффект, который мне бы хотелось (мое реальное использование сложнее, но этот короткий образец должен показать, что я хотел бы сделать). Я полагаю, что reinterpret_cast «работает», но, вероятно, небезопасен?
#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;
}
Похоже, что это должно быть возможным, поскольку данные должны храниться одинаково.
Редактировать: Чтобы быть ясным, я не хочу очищать новый массив std ::, я хочу ссылаться на существующие данные как на один.
STL контейнеры управлять своей памятью. Вы не можете создать массив и управлять им каким-либо массивом, который вы выделили в другом месте. – krammer
Учитывая, что 'std :: array' и' std :: vector' рассчитывают управлять собственной памятью, вы должны быть очень осторожны в использовании 'reinterpret_cast', не предпринимая шагов, чтобы гарантировать, что они не пытаются и не удаляют данные, которые не являются под их контролем. Но это в стороне ... не бойтесь «memcpy». В конце концов, это довольно эффективная рутина. – Rook
Хорошо спасибо. Я хочу сделать это безопасно, не делаю взлома, мне просто интересно, возможно ли это все :) – jcoder