>백엔드 개발 >C++ >C 템플릿 함수는 배열의 크기를 어떻게 결정합니까?

C 템플릿 함수는 배열의 크기를 어떻게 결정합니까?

DDD
DDD원래의
2024-12-05 17:31:11664검색

How Does a C   Template Function Determine the Size of an Array?

"배열의 크기" 템플릿 함수 이해

이 코드는 템플릿 함수를 사용하여 배열의 길이를 결정하지만 내부 작업은 수수께끼일 수 있습니다. 이 작업을 어떻게 수행하는지 자세히 살펴보겠습니다.

매개변수 이해하기

함수 매개변수 T(&)[size]는 처음에는 복잡해 보일 수 있습니다. 내부에서 바깥쪽으로 디코딩하면 크기가 T 유형인 이름 없는 배열에 대한 참조가 드러납니다. 이는 배열의 유형과 크기가 템플릿 매개변수에 의해 지정되는 모든 배열에 대한 참조를 허용한다는 의미입니다.

템플릿 추론의 실행

함수가 배열로 호출되는 경우, as:

int a[10];
GetArrLength(a);

컴파일러는 템플릿 매개변수를 추론하려고 시도합니다. 매개변수 유형을 일치시키려면 T는 int여야 하고 크기는 10이어야 합니다(결과적으로 10개의 정수 배열을 참조하는 매개변수가 생성됨). 그런 다음 함수는 배열의 요소 수를 제공하여 크기를 반환합니다.

잠재적인 문제 해결

이 코드에는 두 가지 잠재적인 문제가 있습니다. 첫째, 크기는 음수일 수 없으므로 서명된 유형을 템플릿 매개변수나 반환 유형에 사용해서는 안 됩니다. 대신 std::size_t:

template<typename T, std::size_t Size>
std::size_t GetArrLength(T(&amp;)[Size]) { return size; }

과 같은 부호 없는 유형을 활용해야 합니다. 둘째, 배열 크기의 일정한 특성에도 불구하고 함수의 결과는 상수 표현식이 아닙니다. 유용성을 높이려면 상수 표현식을 사용하는 것이 좋습니다.

template <std::size_t N>
struct type_of_size
{
    typedef char type[N];
};

template <typename T, std::size_t Size>
typename type_of_size<Size>::type&amp; sizeof_array_helper(T(&amp;)[Size]);

#define sizeof_array(pArray) sizeof(sizeof_array_helper(pArray))

이 기술을 사용하면 상수 표현식으로 배열의 크기를 검색할 수 있습니다.

int a[10];
const std::size_t n = sizeof_array(a); // constant-expression!

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

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