【发布时间】:2015-02-02 17:45:20
【问题描述】:
我知道我的类方法有三种不同的实现“位置”:
1) 在我的类(.h 文件)中定义方法并在我的 .cpp 文件中实现它
//.h
class Foo
{
int getVal() const;
};
//.cpp
int Foo::getVal() const
{ return 0; }
2) 在我的类(.h 文件)中定义并实现方法。
//.h
class Foo
{
int getVal() const
{ return 0; }
};
3) 在我的类中定义方法并在类之外但在我的头文件中实现它。
//.h
class Foo
{
int getVal() const;
};
int Foo::getVal() const
{ return 0; }
这三种方法的主要区别是什么?
【问题讨论】:
-
#3 可能会导致链接器错误(只要将此标头包含在多个源文件中)。
-
#2 将让编译器在适用的情况下内联函数(不需要整个程序优化),因此它通常用于小型 getter/setter 函数,就像您在示例中显示的那样。对于模板类(仅限),#1 不是一个选项,#2 和 #3 等效。
-
为了更快的编译速度,尽量选择#1。
-
请注意,在您说“定义”的地方,正确的术语是声明。函数的定义包括函数体。
标签: c++