模板的内联关键字

use*_*077 1 c++

此代码将放在头文件中:

template<typename TTT>
inline Permutation<TTT> operator * (const Cycle<TTT>& cy, const Permutation<TTT>& p)
{
    return Permutation<TTT>(cy)*p;
}
Run Code Online (Sandbox Code Playgroud)

inline必要避免链接器错误吗?

如果此函数不是模板并且头文件用于多个.cpp文件,inline则必须避免抱怨函数的多个定义的liker错误.似乎链接器忽略了这个模板.

Mik*_*our 5

inline必要避免链接器错误吗?

在功能模板上,没有.模板(如内联函数)受制于更宽松的单一定义规则,该规则允许多个定义 - 只要定义相同且在单独的翻译单元中.

如你所说,inline如果你想在标题中定义一个非模板函数,那将是必要的; 非内联函数受更严格的单定义规则约束,并且在程序中只能有一个定义.

对于血淋淋的细节,这是由C++ 11 3.2/5指定的:

可以有多个类类型的定义,带有外部链接的内联函数,类模板,非静态函数模板,类模板的静态数据成员,类模板的成员函数或模板特化,其中有一些模板参数如果每个定义出现在不同的翻译单元中,并且定义满足以下要求,则不在程序中指定.

("以下要求"基本上说定义必须相同).