我读过内联模板函数特化 here
除了要求 inline
关键字在 header 中实例化是合乎逻辑的,我找不到将非专用函数模板标记为 inline
是否有任何区别的答案> 在标题中?无论是成员函数还是普通函数。
请不要解释编译器如何比程序员更清楚,问题是:inline
关键字对 header 中的“解压”模板有意义吗?
非专用模板是否始终内联,因为它们位于标题中?对于下面的示例伪代码,如果我们假设 Foo::bar
方法可以很长或很短,则省略 inline
关键字或添加 inline
关键字对编译器内联或不内联扩展函数的实际机会有什么影响?
这是反射(reflect)我的代码的成员函数模板示例:
class Foo
{
public:
template<typename Type>
static Type bar();
};
示例非内联定义:
template<typename Type>
Type Foo::bar()
{
return Type();
}
示例内联定义:
template<typename Type>
inline Type Foo::bar()
{
return Type();
}
上面的inline
关键字是总是无用的,还是只有当函数可以被编译器内联时才有意义?模板总是内嵌在标题中吗?
最佳答案
inline
关键字用于绕过 One Definition Rule , 不表示 inline substitution的函数调用。请注意,编译器仍然需要函数定义来执行内联替换,因此如果函数定义位于包含在不同文件中的头文件中,则您必须提供 inline
。
专用函数模板就像普通函数一样,因为所有模板参数都已固定(即,函数模板不能部分专用)。因此,如果(完全)专用函数模板在头文件中,您应该将其内联
以处理同一个定义规则,就像处理普通函数一样。
关于c++ - inline 关键字对类成员模板函数的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58757179/