gpt4 book ai didi

c++ - 成员函数模板是否需要 "inline"

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:51:47 26 4
gpt4 key购买 nike

如果我在非模板类中有一个成员函数模板并想在类外定义它 - 我必须使用“内联”吗?

例子:

class A
{
template <class D>
void someMethod(D param);
}

template <class D>
/* inline needed here? */ void A::someMethod(D param)
{
}

标准的第 3.2.5 节说函数模板不属于单一定义规则。成员函数模板是这方面的函数模板吗?

编辑:如果没有内联,链接器不会提示 - 但仍然 - 它是否有效 C++03?

编辑:

到目前为止我学到了什么:gcc(假设还有其他编译器)将隐式模板实例导出为弱符号,这意味着如果它们在多个翻译单元中实例化,在链接时不会发生冲突.由于弱符号不是标准的一部分 - 标准是否以某种方式隐式要求模板实例化以这种方式运行,我是否可以期望其他符合标准的编译器/链接器组合具有相同的行为?

由于 inline 基本上被优化忽略,但允许在不同的翻译单元中定义多个函数,这隐含地转换为将这些函数导出为 weak symbol。这是否意味着将模板声明为内联 是多余的?

最佳答案

无论成员函数模板是不是函数模板,它们肯定不是对象或非内联函数,所以One Definition Rule不适用。

但它们实际上是函数模板,对于不特定于非成员函数模板的标准的其他应用程序也算作函数模板。

关于c++ - 成员函数模板是否需要 "inline",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12690870/

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