>  기사  >  백엔드 개발  >  문자열 길이의 컴파일 타임 평가를 어떻게 보장할 수 있습니까?

문자열 길이의 컴파일 타임 평가를 어떻게 보장할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-31 10:13:29214검색

How Can We Guarantee Compile-Time Evaluation of String Length?

문자열 길이의 컴파일 시간 계산

컴파일 시간에 문자열 리터럴의 길이를 계산하기 위해 아래 코드 조각은 재귀 함수를 활용합니다.

<code class="cpp">#include <cstdio>

int constexpr length(const char* str)
{
    return *str ? 1 + length(str + 1) : 0;
}

int main()
{
    printf("%d %d", length("abcd"), length("abcdefgh"));
}</code>

이 함수는 clang에서 생성된 어셈블리 코드에서 알 수 있듯이 예상대로 길이를 성공적으로 계산합니다. 이는 컴파일 타임에 계산되는 결과를 보여줍니다.

표준 보증 컴파일 타임 평가

그러나 컴파일 타임에 상수 표현식의 평가가 표준에 의해 명시적으로 보장되지 않는다는 점에 유의하는 것이 중요합니다. C 표준 섹션 5.19 초안에는 번역 중에 상수 표현식을 평가할 수 있다는 비표준 인용문이 포함되어 있지만 이것이 최종적인 보장을 제공하지는 않습니다.

컴파일 시간 평가 보장

컴파일 타임에 함수가 평가되도록 하기 위해 Bjarne Stroustrup은 결과를 constexpr 변수에 할당할 것을 권장합니다. 이는 다음 예에서 볼 수 있습니다.

<code class="cpp">constexpr int len1 = length("abcd");</code>

추가로 Bjarne Stroustrup은 컴파일 시간 평가가 보장되는 두 가지 구체적인 사례를 간략히 설명합니다.

  1. 함수가 사용되는 경우 배열 바인딩과 같은 상수 표현식이 필요합니다.
  2. constexpr을 초기화하는 데 함수가 사용되는 경우

따라서 안정적인 컴파일 시간 평가를 위해 다음을 따르는 것이 좋습니다. 두 가지 접근 방식 중 하나를 선택하세요.

위 내용은 문자열 길이의 컴파일 타임 평가를 어떻게 보장할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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