의 내용에 배열 참조 'T (&) [n]`을 가져온다. std::array<T, n>
이 있고 그 내용에 대한 배열 참조를 원한다고 가정한다. elems
배열 구성원).`std :: array <T, n>`
나는 std::array<T, n>::data()
이 T *
이 아니라 T (&)[n]
이 아니기 때문에 어떤 종류의 캐스트가 필요하다고 생각하여 놀랐다. 쓸 수 있습니다 :
std::array<int, 5> arr;
int (&ref)[5] = *reinterpret_cast<int (*)[5]>(arr.data());
그러나 이것은보기 흉하고 잠재적으로 안전하지 않습니다. 합법적 인 (잘 정의 된) 코드인가요? 더 좋은 방법이 있습니까?
재사용 가능한'constexpr' 함수 템플릿을 제안하여 그 추악함을 숨길 수 있습니다. –
코너 케이스는 크기가 0 일 때 오른쪽 경우는 정의되지 않은 동작이지만 왼쪽 측면도 컴파일되지 않습니다 (예 : 0 요소의 배열을 선언 할 수 없음) –
'5'보다는'arr.size()'를 사용하는 것이 덜 부서지기 쉽습니다 ('constexpr'이므로 배열 크기로 사용할 수 있습니다). 하지만 캐스트가 잘 정의되어 있는지 여부는 확실하지 않습니다. –