【问题标题】:Type-specific static declaration in a template function模板函数中特定类型的静态声明
【发布时间】:2016-07-16 01:36:13
【问题描述】:

我刚刚写了以下sn-p:

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

【问题讨论】:

  • 你试过了吗?为什么它不应该工作?每个实例化都有自己的静态变量
  • @tobi303:令我震惊的是,在静态声明的本质中,它可能只定义一次(例如,对于任何类型首先实例化它)。在接下来的几天里我只能用一个编译器尝试它,但我实际上是在这里编写跨平台代码。
  • 不,它只为模板的每个实例定义一次。我有一个不错的视频链接,上面有一个例子,也许我会找到它......
  • 这里是link(6:00 左右),this 几乎是个骗子
  • This 回答了您的问题,即使该问题与一些无关的事情有关。

标签: c++ templates


【解决方案1】:

注意,一旦实例化

log2<double>

log2<float>

是两个完全不同的功能。他们都有自己的static 变量。模板实例化后,情况就好像你有两个函数一样:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    相关资源
    最近更新 更多