1

C++14 では、変数テンプレート (変数テンプレート) が導入されました。

template<class T>
constexpr T pi = T(3.1415926535897932385);  // variable template

template<class T>
T circular_area(T r) // function template
{
    return pi<T> * r * r; // pi<T> is a variable template instantiation
}

実行時のバイナリ メモリ フットプリントと速度の両方に関して、これを使用するオーバーヘッドはどのくらいですか?

4

2 に答える 2

5

以下の間に何らかの違いがある場合は、これをバグとしてコンパイラメーカーに報告します。

template<class T>
constexpr T pi = T(3.1415926535897932385);  // variable template

template<class T>
T circular_area(T r) // function template
{
    return pi<T> * r * r; // pi<T> is a variable template instantiation
}

constexpr double pi = 3.1415926535897932385;

double circular_area(double r)
{
    return pi * r * r;
}

に置き換えdoubleても同様ですfloat

一般constexprに、コンパイルされたコードで関連する定数を直接評価する必要があります。それができない場合、コンパイラはエラーを出すはずです ( true ではないためconstexpr)。

于 2016-02-29T08:40:48.323 に答える