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

标签 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++ 标准那样工作吗?

最佳答案

注意一旦实例化

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/

相关文章:

c++ - 寻找平台 SDK SSPI(Schannel) 示例 c++

C++ 指针和字符串寻址

c++ - 使用 GDB 修复大型项目中的双重释放或损坏 (!prev) 错误

使用模板的 C++ 11 异步编程

c++ - FFmpeg 为第一个非关键帧返回负 PTS 和 DTS

c++ - 如何让 VS2008 在 C++ 项目中使用 __cdecl 而不是 __thiscall?

C++模板类编译错误: expected init-declarator before '<' token

c++ - 模板类的标准流输出

C++ 在数组中存储具有不同模板的相同类

c++ - 用于位计数的元程序