>백엔드 개발 >C++ >상수 표현식에서 `constexpr` 함수의 함수 매개변수를 사용할 수 없는 이유는 무엇입니까?

상수 표현식에서 `constexpr` 함수의 함수 매개변수를 사용할 수 없는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-14 15:06:021057검색

Why Can't I Use a Function Parameter of a `constexpr` Function in a Constant Expression?

상수 표현식에서 constexpr 함수의 함수 매개변수를 사용할 수 없습니다

문제 소개 및 코드 예

제공된 코드는 다음을 수행하려는 시도를 보여줍니다. 상수 표현식 내에서 constexpr 함수 make_const의 반환 값을 활용하지만 오류가 발생합니다.

static constexpr int make_const(const int i) {
    return i;
}

void t1(const int i) {
    constexpr int ii = make_const(i);  // Error occurs here (i is not a constant expression)
    std::cout << ii;
}

int main() {
   t1(12); // Call the function
}

설명 및 접근 방법

constexpr 함수는 대중적인 믿음과 달리 마법처럼 작동하지 않습니다. 컴파일 타임에 매개변수를 평가합니다. 대신 입력 인수에서 출력으로 constexprness를 전파할 수 있습니다. 그러나 주어진 코드에서 함수 매개변수 i는 constexpr이 아니므로 constexpr 함수 make_const는 이를 하나로 변환할 수 없습니다.

이 오류는 후속 할당 constexpr int ii = make_const(i)가 다음을 시도하기 때문에 발생합니다. constexpr이 아닌 표현식(make_const(i))의 결과로 초기화된 constexpr 변수(ii)를 선언합니다. constexpr 변수는 항상 constexpr 표현식으로 초기화되어야 하므로 이는 허용되지 않습니다.

constexpr 함수 이해

constexpr 함수는 두 가지 주요 특성을 나타냅니다.

  • 문서: constexpr 인수가 주어지고 정의되지 않은 동작 없이 실행되는 경우 함수가 컴파일 타임에 평가될 수 있음을 컴파일러에 나타냅니다.
  • 지침: 컴파일러에 프롬프트를 표시합니다. constexpr 표현식이 필요한 특정 컨텍스트에서 함수가 사용되는 경우 컴파일 타임에 함수를 평가합니다.

해결 방법

오류를 해결하려면 함수 매개 변수 자체가 constexpr인지 확인할 수 있습니다. . 이는 함수 선언을 다음과 같이 수정하여 달성할 수 있습니다.

constexpr int make_const(constexpr int i) {
    return i;
}

이러한 변경은 함수가 constexpr 입력을 constexpr 출력으로 효과적으로 변환할 수 있도록 보장하여 상수 표현식 내에서 함수의 의도된 사용을 가능하게 합니다.

제공된 대체 코드 예제에서 make_const 함수는 해당 매개변수가 이제 constexpr이므로 t1에서 constexpr 표현식으로 호출될 수 있습니다. 그러나 constexpr이 아닌 표현식(예: 런타임 변수)의 결과를 함수에 전달하려고 시도하면 함수에 constexpr 실행을 위해 constexpr 인수가 필요하기 때문에 여전히 오류가 발생합니다.

위 내용은 상수 표현식에서 `constexpr` 함수의 함수 매개변수를 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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