模板类的方法是否暗示内联链接?

Dav*_*vid 4 c++ templates inline linkage

模板类的方法是否隐含了inline链接(不是在谈论内联优化),还是只是模板化的方法?

// A.h

template<typename T>
class A
{
public:
    void func1();                       //  #1
    virtual void func2();               //  #2
    template<typename T2> void func3(); //  #3
};

template<typename T>
void A<T>::func1(){}    //  #1

template<typename T>
void A<T>::func2(){}    //  #2

template<typename T>
template<typename T2>
void A<T>::func3<T2>(){}    //  #3
Run Code Online (Sandbox Code Playgroud)

以上所有案例都是inline[联系]吗?(我应该明确写inline任何一个)?

Dav*_*eas 12

如果模板函数和模板类的成员函数是隐式实例化的,则它们是隐式内联的,但要注意模板特化不是.

template <typename T>
struct test {
    void f();
}
template <typename T>
void test<T>::f() {}           // inline

template <>
void test<int>::f() {}           // not inline
Run Code Online (Sandbox Code Playgroud)

缺乏更好的报价:

除非在某些翻译单元中明确实例化(14.7.2)相应的专门化,否则必须在隐式实例化的每个翻译单元中定义非导出模板(14.7.1); 无需诊断