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

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

Barbara Streisand
풀어 주다: 2024-12-24 04:28:13
원래의
256명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿