当我编写一个简单(非模板)类时,如果函数实现“就地”提供,它会自动被视为inline
.
class A {
void InlinedFunction() { int a = 0; }
// ^^^^ the same as 'inline void InlinedFunction'
}
当谈论基于模板的类时,这条规则怎么样?
template <typename T> class B {
void DontKnowFunction() { T a = 0; }
// Will this function be treated as inline when the compiler
// instantiates the template?
};
另外,情况如何inline
应用于非嵌套模板函数的规则,例如
template <typename T> void B::DontKnowFunction() { T a = 0; }
template <typename T> inline void B::DontKnowFunction() { T a = 0; }
第一种和第二种情况会发生什么?
谢谢。
因为当你实例化你得到一个类时,该函数就像一个普通的成员函数。它是在该类中定义的,因此该函数会自动内联。
但在这里这并不那么重要。无论如何,您可以在程序中多次定义函数模板或类模板的成员 - 您不需要inline
告诉编译器这一点,就像在非模板情况下一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)