>백엔드 개발 >C++ >C에서 컴파일 타임에 정적 배열을 프로그래밍 방식으로 초기화할 수 있습니까?

C에서 컴파일 타임에 정적 배열을 프로그래밍 방식으로 초기화할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-17 08:02:03379검색

 Can Static Arrays Be Programmatically Initialized at Compile Time in C  ?

컴파일 시간에 프로그래밍 방식으로 정적 배열 생성

C에서는 특정 값을 유지하기 위해 컴파일 시간에 정적 배열을 초기화할 수 있습니다. 다음 예를 고려하십시오.

const std::size_t size = 5;    
unsigned int list[size] = { 1, 2, 3, 4, 5 };

질문 1: 프로그래밍 방식으로 값 할당

컴파일 시 메타 프로그래밍 기술을 사용하여 이러한 값을 프로그래밍 방식으로 할당할 수 있습니까?

답변:

C 0x 기능을 사용하면 템플릿의 로컬 또는 멤버 배열을 만들고 가변 템플릿 인수 목록에서 초기화할 수 있습니다. 그러나 이는 최대 템플릿 인스턴스화 깊이에 의해 제한되며 대규모 배열에는 실용적이지 않을 수 있습니다.

질문 2: 선택적 할당

특정 배열 요소에 다른 값은 동일하지만 다른 값은 다를 경우 컴파일 타임에 프로그래밍 방식으로 선택 할당을 수행할 수 있습니까?

답변:

템플릿 메타 함수를 사용하면 값 배열을 생성하고 사용할 수 있습니다. 정적 배열을 부분적으로 초기화합니다. 다음 예에서는 인덱스를 기준으로 값을 선택적으로 할당합니다.

template<size_t index> struct MetaFunc { 
    enum { value = index + 1 }; 
};

void test() {
    const std::size_t size = 7;
    typedef generate_array<size, MetaFunc>::result A;

    for (std::size_t i=0; i<size; ++i) { 
        if (i <= 1 || i >= 4) {
            A::data[i] = 0;
        }
    }
}

템플릿 메타 기능을 활용하면 컴파일 시간 평가를 보장하면서 프로그래밍 방식으로 선택적 할당을 달성할 수 있습니다.

위 내용은 C에서 컴파일 타임에 정적 배열을 프로그래밍 방식으로 초기화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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