所有代码从我读过的内容来看,A1 和 A2 是相同的,但如果 A3 与 A2 相同,我就不知道了。我知道代码会编译,因为所有的 A 类都被模板化了。
注意:所有类和方法声明都在 .h 文件中。
template <typename _Ty>
class A1 {
public:
A1();
void foo() { ... }
};
template <typename _Ty>
class A2 {
public:
A2();
void foo();
};
template <typename _Ty>
inline void A2<_Ty>::foo() { ... }
template <typename _Ty>
class A3 {
public:
A3();
void foo();
};
template <typename _Ty>
void A3<_Ty>::foo() { ... } // note: No inline keyword here.
附言我在 stackoverflow 上看到过这个问题的变体,但不是这个确切的问题。
最佳答案
是的,它是有意义的,但与模板结合时效果不大。
inline
关键字的主要作用是告诉编译器,这个函数可能在多个编译单元中以相同的定义出现,所以需要标记为“select-one”链接器(这样你就不会得到多个定义错误)。模板已经具有此功能。
inline
也向编译器提示您认为函数应该内联,但编译器通常会自行做出内联优化的最终决定。
关于c++ - 如果在头文件中定义函数,inline 关键字是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10282108/