這是不確定的行爲?我可以施放一個std ::數組來切片嗎?還是有什麼我可以用來代替?
std::array<int, 5> x = {3, 5, 1, 2, 3};
std::array<int, 3>& y = *reinterpret_cast<std::array<int, 3>*>(&x[1]);
for(int i = 0; i != 3; i++) {
std::cout << y[i] << "\n";
}
也許是的,但我真的覺得應該有切片std::array
個安全方式。
編輯:繼拉狄克的建議:
template<unsigned N, unsigned start, unsigned end, typename T>
std::array<T, end - start>& array_slice(std::array<T, N>& x)
{
static_assert(start <= end, "start <= end");
static_assert(end <= N-1, "end <= N");
return *reinterpret_cast<std::array<T, end - start>*>(&x[start]);
}
編輯:好吧,我決定,我很不滿意std::array
S和將移動到別的東西,任何想法?
*但我真的覺得應該有一個安全的方式來切分std :: arrays *寫一個模板函數'array_cast'。 – 2012-05-25 20:13:18