부동 소수점 상수를 static constexpr
변수로 선언하는 것과 아래 예제와 같은 함수가 다르다는 것입니까 아니면 스타일의 문제입니까?정적 constexpr 변수 대 함수
class MY_PI
{
public:
static constexpr float MY_PI_VAR = 3.14f;
static constexpr float MY_PI_FUN() { return 3.14f; }
}
부동 소수점 상수를 static constexpr
변수로 선언하는 것과 아래 예제와 같은 함수가 다르다는 것입니까 아니면 스타일의 문제입니까?정적 constexpr 변수 대 함수
class MY_PI
{
public:
static constexpr float MY_PI_VAR = 3.14f;
static constexpr float MY_PI_FUN() { return 3.14f; }
}
constexpr
기능기능은 무료 변수 (입니다 14 C++까지)가 없습니다 이점을 가지고 : 그들은 쉽게 어떤 클래스 상용구없이 템플릿 수 있습니다. 당신이 쓰기, 그것은 짧은도 easir되지 않습니다 무료 기능을 대신 static
멤버 함수를 사용하기로 결정하는 경우,
template<typename T>
constexpr T pi();
template<>
constexpr float pi() { return 3.14f; }
template<>
constexpr double pi() { return 3.1415; }
int main()
{
constexpr float a = pi<float>();
constexpr double b = pi<double>();
}
그러나 : 그것은 당신이 정밀 템플릿 인수에 따라 당신의 pi
을 가질 수 있습니다 의미 static
멤버 변수보다
constexpr
변수변수를 사용하는 주요 이점은 잘 ...이다. 상수를 원해, 그렇지? 그것은 은 의도를 명확히하고이며 여기가 가장 중요한 포인트 중 하나 일 수 있습니다.
당신은 여전히 클래스와 동등한 동작을 수 있지만, 다음, 당신은 당신의 클래스가 기타 수학 상수를 포함하는 클래스의 경우 다음과 같이 사용 할 것 :
constexpr float a = constants<float>::pi;
또는 클래스의 경우이 같은를 단지 pi
을 표현하기위한 것입니다 :
constexpr double = pi<double>::value;
을 첫 번째 경우, 당신은 짧아집니다 때문에 작성하는 변수를 사용하는 것이 좋습니다 그리고 정말 당신이 상수를 사용하여 뭔가를 계산하려고하지 않는 것을 보여줍니다. 파이를 나타내는 클래스가 있다면 클래스 전체가 아닌 constexpr
함수를 사용하면됩니다. IMHO가 더 간단해질 것입니다.
constexpr
variable templates는 대신 C++ 11의 C++ 14을 사용하도록 선택하는 경우, 당신은 constexpr
변수 템플릿의 다음과 같은 종류를 쓸 수 있습니다 :
template<typename T>
constexpr T pi = T(3.1415);
: C++ 14에서
constexpr float a = pi<float>;
,이 일을 할 수있는 좋은 방법이 될 수 있습니다. 이전 버전의 표준을 사용하는 경우 처음 두 단락은 계속 유지됩니다.
C++ 14? 그게 뭐야? : D – cubuspl42
@ cubuspl42 내년에 사용할 수있는 다음 C++ 표준. GCC와 Clang은 이미 일부 기능을 구현하기 시작했습니다. – Morwenn
링크를 제공해 주시겠습니까? – cubuspl42