C 11 문자열 리터럴을 사용한 컴파일 타임 문자열 해싱
질문:
그런가요? C 11의 새 문자열을 사용하여 컴파일 타임에 문자열의 해시를 계산할 수 있습니다. 리터럴?
답변:
예, 가능하지만 모든 컴파일러에서 작동하지 않을 수 있으므로 주의가 필요합니다.
연산자:
컴파일 시간 문자열 해싱에 대한 연산자는 명시적으로 지정되지 않습니다. 정의되었습니다. 대신 문자열 리터럴을 입력으로 사용하는 컴파일 타임 해시 함수를 사용하여 상수 표현식이 생성됩니다.
사용 사례:
한 가지 잠재적인 사용 사례는 다음과 같습니다. 문자열의 해시를 기반으로 다양한 작업을 수행할 수 있는 스위치 문:
void foo(const std::string& value) { switch(std::hash<value>()) { case "one"_hash: one(); break; case "two"_hash: two(); break; default: other(); break; } }
예 구현:
다음은 constexpr 함수를 사용한 구현 예입니다.
template<size_t idx> constexpr uint32_t crc32(const char * str) { // Compile-time CRC32 implementation return (crc32<idx-1>(str) >> 8) ^ crc_table[(crc32<idx-1>(str) ^ str[idx]) & 0x000000FF]; } template<> constexpr uint32_t crc32<size_t(-1)>(const char * str) { // Stop recursion return 0xFFFFFFFF; } #define COMPILE_TIME_CRC32_STR(x) (crc32<sizeof(x) - 2>(x) ^ 0xFFFFFFFF)
이 함수는 다음과 같이 사용할 수 있습니다.
enum TestEnum { CrcVal01 = COMPILE_TIME_CRC32_STR("stack-overflow"), };
이 예에서는 , CrcVal01은 "stack-overflow" 문자열의 컴파일 타임 해시로 평가됩니다.
위 내용은 C 11 문자열 리터럴을 컴파일 타임 문자열 해싱에 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!