代码之家  ›  专栏  ›  技术社区  ›  Buddhika Chaturanga

在源文件(cpp)中定义静态和内联模板函数有哪些优点?

  •  1
  • Buddhika Chaturanga  · 技术社区  · 7 年前

    假设我们在X.cpp源文件中定义了一个模板函数,如下所示:

    /............. X.cpp .........................../
    template<class Container>
    static inline void foo(const Container& container,std::string& content)
    {
         /.../
    }
    
    1. 我们是否使用 static inline 在这里
    2. 如果我们在一个 cpp
    1 回复  |  直到 7 年前
        1
  •  1
  •   StoryTeller - Unslander Monica    7 年前

    在这里,我们是否使用静态和内联优化了编译器/链接器?

    static 限定符使模板函数具有内部链接。意思是这个名字 foo 将仅在的翻译单元内引用它 X.cpp . 如果相同的定义出现在 Y.cpp ,这是一个不同的模板函数。

    这个 inline 说明符可能是鼓励编译器内联调用的错误尝试。由于编译器甚至在没有说明符的情况下也可以这样做,如果他们选择忽略说明符,甚至可以忽略它,这是毫无意义的。人们最多只能说它澄清了意图。但YMMV对这是一个多么好的想法。

    不要试图为他们做编译器/链接器的工作。指定连接 有道理 . 基于相同的原理,将定义放在头文件/cpp文件中,让构建系统工作。

    如果您人为地开始将模板设置为静态,并将其包含在不同的翻译单元中,那么您的编译器/链接器很可能会出现谨慎错误,并扩大可执行文件的大小。