더북(TheBook)

std::array 객체를 다른 함수에 전달하는 방식은 기본 데이터 타입을 전달하는 것과 유사합니다. 값 또는 참조(reference)로 전달할 수 있고, const를 함께 사용할 수도 있습니다. C 스타일 배열을 함수에 전달할 때처럼 포인터 연산을 사용한다거나 참조 또는 역참조(de-reference) 연산을 하지 않아도 됩니다. 그러므로 다차원 배열을 전달하는 경우에도 std::array를 사용하는 것이 가독성이 훨씬 좋습니다. 다음은 사용자 정의 함수 print()std::array 배열을 값으로 전달하는 예제 코드입니다.

void print(std::array<int, 5> arr) 
{
    for (auto ele : arr)
        std::cout << ele << ", ";
}

std::array<int, 5> arr = {1, 2, 3, 4, 5};
print(arr);

이 코드를 실행하면 다음과 같은 출력이 나타납니다.

1, 2, 3, 4, 5,

앞 예제에서는 print() 함수의 매개변수 데이터 타입에 전달받을 배열 크기가 고정되어 있기 때문에 다른 크기의 배열을 전달할 수 없습니다. 예를 들어 std::array<int, 10>을 전달하면 컴파일러는 함수 매개변수와 일치하지 않는다거나 또는 해당 매개변수 형식으로 변환할 수 없다는 에러 메시지를 출력할 것입니다. 만약 다양한 크기의 std::array 객체에 대해 동작하는 범용적인 배열 출력 함수를 만들고 싶다면 print()를 함수 템플릿으로 선언하고, 배열 크기를 템플릿 매개변수로 전달하면 됩니다. 즉, print() 함수를 다음과 같은 형태로 작성합니다.

template <size_t N>
void print(const std::array<int, N>& arr);
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.