在源文件 (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)
{
/.../
}
- 我们在这里使用
static
和 inline
是否获得任何 compiler/linker 优化?
- 如果我们在
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 很可能会因谨慎而犯错误并破坏您的可执行文件大小。
假设我们在 X.cpp 源文件中定义了一个模板函数,如下所示:
/............. X.cpp .........................../
template<class Container>
static inline void foo(const Container& container,std::string& content)
{
/.../
}
- 我们在这里使用
static
和inline
是否获得任何 compiler/linker 优化? - 如果我们在
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 很可能会因谨慎而犯错误并破坏您的可执行文件大小。