【问题标题】:C++ Does it make sense to declare a template function with static inline?C++ 用静态内联声明模板函数有意义吗?
【发布时间】:2011-07-06 14:39:29
【问题描述】:

我们没有“外部模板”,“模板”函数始终是“隐式内联”。无论如何,这有意义吗?

【问题讨论】:

    标签: c++ templates inline standards


    【解决方案1】:

    这对我来说没有意义。函数模板不是“隐式内联”。您必须明确声明它“内联”以使其内联。

    这并不意味着对它的调用是内联的或不是内联的。这完全是编译器的决定。由于可以在多个翻译单元中定义模板(前提是每个定义都为模板提供相同的行为),所以在这样的模板上放置 inline 并没有太大的影响,据我所知。唯一的效果是告诉优化器你希望对函数模板的调用应该被内联,据我所知。

    制作函数模板static 是完全明智的。这使得您可以在多个翻译单元中定义模板,每个定义都有不同的行为。由于static,模板将具有内部链接,这意味着它们位于其翻译单元的本地并且不会发生冲突。

    不过,将static 放在函数和函数模板上完全独立于将inline 放在它们上面。 staticinline 不像 they are in C99 那样依赖于 C++。

    【讨论】:

    • 我不明白你的意思。您必须定义一个模板函数“隐式内联”,因为 C++ 中没有外部模板函数。
    • @FrEE 这不是 C++ 对“内联”的使用。你的意思是“没有单独的编译”。你的意思是没有导出模板。一些前端和编译器已经实现了“外部模板”C++0x 特性。
    猜你喜欢
    • 2014-02-23
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多