【发布时间】:2019-11-07 21:30:38
【问题描述】:
我读过关于内联模板函数规范here
除了需要 inline 关键字在标头中进行实例化这是合乎逻辑的之外,我找不到答案是否在标头中将非专用功能模板标记为 inline 有什么不同?无论是成员函数还是普通函数。
请不要解释编译器如何比程序员更清楚,问题是:inline 关键字对于标题中的“解包”模板是否有意义?
非专用模板是否总是内联,因为它们位于标题中?对于下面的示例伪代码,如果我们假设 Foo::bar 方法可以非常长或非常短,省略 inline 关键字或添加 inline 关键字对编译器内联或不内联扩展函数的实际机会有任何影响吗?
这是一个反映我的代码的成员函数模板示例:
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隐含在第一个块中。我正在尝试在标准中找到对它的引用。 -
我期待这样的确认,这将回答一切。
-
我没找到。也许对标准有更深入了解的人可以。