배열을 함수로 넘길 때는 길이와 소유권을 따로 전달한다

배열 이름이 매개변수로 넘어가면 첫 요소 포인터처럼 조정됩니다. 함수가 안전하려면 몇 개를 읽는지, 값을 바꾸는지, 메모리를 소유하는지를 코드에 남겨야 합니다.

작은 값 복사

T value독립 사본이 필요할 때 사용합니다.

읽기 구간

const T* + n외부 배열을 읽기만 할 때 길이를 함께 받습니다.

수정 구간

T* + n호출자 배열을 바꿀 때 범위 책임을 같이 둡니다.

길이 없는 포인터

T*끝을 알 수 없어 범위 오류가 숨어들기 쉽습니다.
누가 소유하는가?함수가 메모리를 해제하지 않는다면 빌린 구간임을 전제로 읽습니다.
몇 개를 다루는가?포인터만으로는 길이를 알 수 없으므로 개수 n이나 끝 반복자를 함께 둡니다.
바꿔도 되는가?읽기 전용이면 const를 붙여 수정 가능성을 타입에서 막습니다.
현대 C++에서는 고정 길이는 std::array, 동적 길이는 vector, 빌린 연속 구간은 span으로 계약을 더 분명히 드러냅니다.