> 백엔드 개발 > C++ > C에서 컴파일 타임 문자열을 어떻게 간결하게 선언할 수 있습니까?

C에서 컴파일 타임 문자열을 어떻게 간결하게 선언할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-12-10 02:24:10
원래의
1022명이 탐색했습니다.

How Can I Concisely Declare Compile-Time Strings in C  ?

C에서 컴파일 타임 문자열 선언 Concisley

소개
C에서 컴파일 타임 문자열 선언 컴파일 내내 일정하게 유지되는 는 번거로울 수 있습니다. 기존 접근 방식에서는 다양한 문자 시퀀스를 지정해야 합니다.

using str = sequence<'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!'>;
로그인 후 복사

기존 접근 방식: 과제 및 제한
이상적으로는 다음과 같이 컴파일 시간 문자열을 선언하는 것이 더 간단해야 합니다.

using str1 = sequence<"Hello, world!">;
constexpr auto str2 = "Hello, world!"_s;
로그인 후 복사

그러나 이러한 접근 방식은 장애물:

  • 접근 방식 1에는 외부 연결이 포함된 배열과 복잡한 구현이 필요합니다.
  • 사용자 정의 리터럴을 사용하는 접근 방식 2는 입력의 비consexpr 특성으로 인해 까다롭습니다.
  • Constexpr 함수는 constexpr이 아닌 배열을 다음과 같이 받아들일 수 없습니다. 매개변수.

해결책: str_const 라이브러리
Scott Schurr의 C Now 2012 프레젠테이션에서 str_const 라이브러리는 편리한 솔루션을 제공합니다.

constexpr str_const my_string = "Hello, world!";
static_assert(my_string.size() == 13);
static_assert(my_string[4] == 'o');
constexpr str_const world(my_string, 7, 5);
static_assert(world == "world");
로그인 후 복사

이 솔루션은 constexpr 범위 확인 및 유연한 하위 문자열 검색과 같은 이점을 제공합니다.

업데이트: C 17 및 std::string_view
C 17에서 std::string_view는 유사한 솔루션을 제공합니다.

constexpr std::string_view my_string = "Hello, world!";
static_assert(my_string.size() == 13);
static_assert(my_string[4] == 'o');
constexpr std::string_view world(my_string.substr(7, 5));
static_assert(world == "world");
로그인 후 복사

이 접근 방식 다음과 같은 이점을 제공합니다.

  • 맞춤 라이브러리나 라이브러리가 필요하지 않습니다. 매크로.
  • .at() 또는 .substr()을 사용하여 범위 확인.
  • const 매개변수 유형으로 사용할 수 있습니다.

위 내용은 C에서 컴파일 타임 문자열을 어떻게 간결하게 선언할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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