>백엔드 개발 >C++ >템플릿 함수가 컴파일 타임에 C 배열의 크기를 어떻게 결정할 수 있습니까?

템플릿 함수가 컴파일 타임에 C 배열의 크기를 어떻게 결정할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-24 04:28:13229검색

How Can a Template Function Determine the Size of a C   Array at Compile Time?

배열 크기 결정을 위한 템플릿 기능

아래 템플릿 기능을 고려하세요.

template<typename T, size_t n>
size_t array_size(const T (&)[n])
{
    return n;
}

이 템플릿의 목적 인수로 전달된 배열의 크기를 결정하는 것입니다. 참조로 배열을 전달하면 단순히 포인터를 얻는 것이 아니라 크기가 보존됩니다.

설명

이를 이해하려면 다음을 고려하세요.

  • 참조 없이 함수에 배열을 전달하면 포인터가 붕괴되어 배열 크기가 손실됩니다.
  • 그러나 배열에 대한 참조는 배열의 크기와 유형을 유지합니다.

템플릿 함수에서 배열은 참조로 전달되어 크기가 캡처되도록 합니다. 템플릿은 크기(n)와 요소 유형(T)을 자동으로 추론합니다. 이를 통해 다음과 같이 활용할 수 있습니다:

size_t array_size(const int (&)[3]) {
    return 3;
}

다음과 같이 사용할 수 있습니다:

size_t size_of_a = array_size(a);

고급 사용법

컴파일 시간 크기 결정을 허용하는 이 기술의 변형:

template<typename T, size_t n>
char (& array_size(const T (&)[n]) )[n];

이 템플릿은 다음을 반환합니다. 크기가 n인 char 유형의 배열에 대한 참조입니다. 따라서 다음 코드는 컴파일 시간에 전달된 배열의 크기를 제공합니다.

size_t size_of_a = sizeof(array_size(a));

이 구성은 컴파일 시간에 결정되는 배열 크기를 활성화하고 다음과 같은 작업을 지원합니다.

int havingSameSize[sizeof(array_size(a))];

위 내용은 템플릿 함수가 컴파일 타임에 C 배열의 크기를 어떻게 결정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.