제공된 코드는 다음을 수행하려는 시도를 보여줍니다. 상수 표현식 내에서 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 int make_const(constexpr int i) { return i; }
이러한 변경은 함수가 constexpr 입력을 constexpr 출력으로 효과적으로 변환할 수 있도록 보장하여 상수 표현식 내에서 함수의 의도된 사용을 가능하게 합니다.
제공된 대체 코드 예제에서 make_const 함수는 해당 매개변수가 이제 constexpr이므로 t1에서 constexpr 표현식으로 호출될 수 있습니다. 그러나 constexpr이 아닌 표현식(예: 런타임 변수)의 결과를 함수에 전달하려고 시도하면 함수에 constexpr 실행을 위해 constexpr 인수가 필요하기 때문에 여전히 오류가 발생합니다.
위 내용은 상수 표현식에서 `constexpr` 함수의 함수 매개변수를 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!