컴파일 시간 문자열 해싱
질문: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!