> 백엔드 개발 > C++ > C 11 컴파일 타임 문자열 해싱을 달성할 수 있습니까?

C 11 컴파일 타임 문자열 해싱을 달성할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-12-04 01:05:13
원래의
714명이 탐색했습니다.

Can C  11 Compile-Time String Hashing Be Achieved?

컴파일 시간 문자열 해싱

질문: C 11을 사용하여 컴파일 시간에 문자열의 해시를 계산하는 것이 가능합니까? 새 문자열 리터럴?

답변: 예, 가능합니다.

다음과 같은 연산자는 아직 표준화되지 않았지만 std::hash(value와 유사할 수 있습니다. ) 또는 Meta_hash<"string"_meta>::value.

구현:

컴파일 타임 CRC32 함수를 생성하기 위해 constexpr을 사용하는 GCC용 최근 구현이 개발되었습니다. 이 구현에는 CRC32 테이블을 생성하고 재귀 템플릿 함수를 사용하여 해시를 계산하는 작업이 포함됩니다.

예:

// CRC32 Table (zlib polynomial)
static constexpr uint32_t crc_table[256] = {
    // ...
};

template<size_t idx>
constexpr uint32_t crc32(const char * str)
{
    // ...
}

// ...

#define COMPILE_TIME_CRC32_STR(x) (crc32<sizeof(x) - 2>(x) ^ 0xFFFFFFFF)
로그인 후 복사

이 매크로를 사용하여 컴파일을 계산할 수 있습니다. -time CRC32 해시 문자열:

enum TestEnum
{
    CrcVal01 = COMPILE_TIME_CRC32_STR("stack-overflow"),
};
로그인 후 복사

참고: 이 구현은 GCC에서만 작동하며 MSVC 또는 Intel 컴파일러에서는 작동하지 않습니다.

위 내용은 C 11 컴파일 타임 문자열 해싱을 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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