gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:07:39 24 4
gpt4 key购买 nike

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

/............. X.cpp .........................../
template<class Container>
static inline void foo(const Container& container,std::string& content)
{
/.../
}
  1. 我们是否在此处使用 staticinline 获得任何编译器/链接器优化?
  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?

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

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

关于c++ - 在源文件 (cpp) 中定义带有静态和内联的模板函数有哪些优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47306259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com