【发布时间】:2011-01-07 09:33:59
【问题描述】:
在类声明内部和外部为模板类定义成员函数有区别吗?
内部定义:
template <typename T>
class A
{
public:
void method()
{
//...
}
};
外部定义:
template <typename T>
class B
{
public:
void method();
};
template <typename T>
void B<T>::method()
{
//...
}
对于非模板类,这是内联方法和非内联方法的区别。模板类也是这样吗?
我的大多数同事的默认设置是在类内提供定义,但我一直更喜欢在类外定义。我的偏好合理吗?
编辑:请假设上述所有代码都在类的头文件中提供。
【问题讨论】:
-
我从未在任何地方看到任何引用表明在类声明中定义方法体会使该方法内联。我错过了什么吗?
-
@Dathan:您错过了 C++ 标准的 §9.3/2,其中说:“成员函数可以在其类定义中定义 (8.4),在这种情况下,它是内联的成员函数...”编辑:还要注意这是一个类定义——类声明类似于:
class x; -
感谢您的澄清。 (c:
-
我们似乎有两个相互矛盾的答案,但围绕它们的讨论让我相信这两种方法在技术上本质上是等效的。
标签: c++ class templates inline