我刚刚写了以下片段:
// 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++ 标准那样工作吗?
最佳答案
注意一旦实例化
log2<double>
和
log2<float>
是两个完全不同的函数。他们都有自己的 static
变量。模板实例化后,这与您有两个函数的情况相同:
double log2(double) {
static double x;
/*...*/
}
和
float log2(float) {
static float x;
/*...*/
}
这也很好地解释了here例如 6:00 左右。
关于c++ - 模板函数中特定于类型的静态声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38401945/