float 값을 기본 매개변수로 사용하여 일반 클래스 템플릿을 인스턴스화하려고 하면 컴파일러에서 다음과 같은 오류가 발생할 수 있습니다. 문제 오류. 정수 값은 예상대로 작동하지만 부동 소수점은 그렇지 않습니다.
C 11 표준(14.3.2/1)에 따르면 non-type 템플릿 인수는 -type 템플릿 매개변수는 특정 규칙을 준수해야 합니다. 한 가지 제한 사항은 부동 소수점 값이 될 수 없다는 것입니다. 대신 정수형 또는 열거형 유형, 템플릿 매개변수 유형의 변환된 상수 표현식 또는 기타 특정 구문이어야 합니다.
이러한 제한은 부동 소수점 계산의 부정확한 특성. 부동 소수점 값을 정확하게 표현하는 것이 항상 가능한 것은 아니며, 이로 인해 예기치 않은 동작이 발생할 수 있는 잠재적인 부정확성이 발생할 수 있습니다. 다음 예를 고려하십시오.
func<1/3.f>(); func<2/6.f>();
동일한 함수를 두 번 호출하려고 했지만 1/3과 2/6의 부동 소수점 표현은 잠재적인 반올림 오류로 인해 동일하다고 보장되지 않습니다. 이는 의도하지 않은 함수 호출로 이어질 수 있습니다.
어떤 방식으로든 부동 소수점 값을 템플릿 인수로 표현하는 것이 목표인 경우 한 가지 옵션은 C 11 상수 표현식(constexpr)을 활용하는 것입니다. . 이를 통해 컴파일 시간에 부동 소수점 값의 분자와 분모를 계산할 수 있으며, 이는 별도의 정수 인수로 전달될 수 있습니다.
그러나 부동 소수점 값이 각 값에 가깝도록 임계값을 정의하는 것이 중요합니다. 다른 하나는 동일한 분자/분모 쌍을 공유합니다. 그렇지 않으면 부동 소수점 값을 비유형 템플릿 인수로 제한하는 근거가 여전히 유효합니다.
위 내용은 부동 소수점 값을 C 템플릿 매개변수로 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!