模板函数中特定于类型的静态声明

时间:2016-07-15 17:25:17

标签: c++ templates

我刚刚编写了以下代码段:

// Fix for MinGW 4.9.2 bug - std::log2 is missing there
template <typename T>
T log2 (T value)
{
    static const T l2 = std::log(T(2));
    return std::log(value) / l2;
}

显然,l2 对每个T类型都是唯一的,因为 类型为T。但它是否按照C ++标准实际工作?

1 个答案:

答案 0 :(得分:2)

注意一旦实例化

log2<double>

log2<float>

是两个完全不同的功能。他们都得到了自己的static变量。在模板实例化之后,这与您有两个函数的情况相同:

double log2(double) {
    static double x;
    /*...*/
}

float log2(float) {
    static float x;
    /*...*/
}

在6:00左右的示例中,这也很好地解释了here