컴파일러에서 최적화되고 인라인 될 때 다음 코드가 삼항 연산을 평가하는 데 필요한 분기를 제거한다고 가정하는 것이 안전한가요? 또는 대부분의 주류 컴파일러를 사용하는 경우 분기를 피하기 위해 아래의 메소드를 두 개의 분리 된 메소드로 분리하는 것이 현명합니까?C++ 템플릿 : 인라인 코드 및 컴파일러 최적화
/*! \brief this method returns the cos of an angle. User can specify if it is
* in degrees or radians.
*/
template <typename T, angle_mode AM>
T cos(const T &angle)
{
return (AM == radians) ?
std::cos(angle) :
std::cos(degrees_to_radians(angle));
}
정말 어떻게 사용하는지에 따라 다릅니다. AM이 상수 일 때만 최적화가 작동합니다. AM이 변수라면 아무 것도 최적화 할 방법이 없습니다. – cup
귀하의 해체가 질문과 관련이없는 것처럼 보입니다. 첫 번째 스 니펫은'degrees_to_radians()'(비교는 없지만 다른 함수를 호출 함)이고 두 번째 스 니펫은'main'입니다. 여기서 언급 한 브랜치는'glext2pi()'의 인라인 버전에 포함되어 있습니다. 'AM '에 대한 당신의 시험은 오래 전에 끝났습니다. –