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

What are the advantages gain by defining a template function with static and inline in a source file(cpp)?

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

/............. X.cpp .........................../
template<class Container>
static inline void foo(const Container& container,std::string& content)
{
     /.../
}
  1. 我们在这里使用 staticinline 是否获得任何 compiler/linker 优化?
  2. 如果我们在 cpp 文件中有大量的模板函数定义,这会影响减少每个翻译单元的构建时间吗?

Do we gain any compiler/linker optimization using static and inline here?

不太可能。 static 限定符使模板函数具有内部链接。这意味着名称 foo 将仅在 X.cpp 的翻译单元内引用它。如果完全相同的定义出现在 Y.cpp 中,那么对于所有意图和目的来说,它都是一个不同的模板函数。

inline 说明符可能是鼓励编译器内联调用的错误尝试。由于编译器即使没有说明符也会这样做,如果他们愿意,甚至可以忽略它,这是没有意义的。最多可以说它澄清了意图。但是 YMMV 说这是个好主意。

If we have considerable amount of template functions definitions in a cpp file,will this affect to reduce build time for each translation unit?

不要试图为他们做 compiler/linker 的工作。指定 有意义的链接 。基于相同的原理将定义放在 header/cpp 文件中,并让您的构建系统正常工作。

如果您人为地开始使模板静态化并将它们包含在不同的翻译单元中,您的 compiler/linker 很可能会因谨慎而犯错误并破坏您的可执行文件大小。