在C++中,在类外声明函数有什么好处?

6
我对C++比较陌生。我遇到了两种声明成员函数的方式,即在类内和在类外定义。我搜索了一下它们之间的区别,发现在类内定义的函数被视为内联函数。
之前我读过有关内联函数的资料,指出内联只是请求编译器用函数体替换函数调用。但如果函数很复杂(如递归、包含静态变量、switch等),则编译器会忽略该请求。因此,即使我们在类内部声明函数,如果它很复杂,则编译器会忽略该请求。那么,如果我们可以让编译器自动为我们执行此操作,为什么还要在类外定义函数呢?

1
有很多原因造成这种情况。现在你不需要理解所有这些原因,重要的是随着你继续学习C++并且变得更加熟练和有经验,你会自然而然地学习和认识到两种方法之间的许多差异。现在不要浪费时间关注这些琐事,保持专注于学习语言。 - Sam Varshavchik
只需在类外定义它们,这样你的类就不会太大而无法阅读。 - NathanOliver
“inline” 与实际的内联关系不大,更多地与ODR(一次定义规则)有关。 - Jesper Juhl
不要忘记,通常您需要传递接口到类的定义,但由于某种原因无法传递类的工作方式。 - user4581301
1
在类声明中定义的函数是隐式的inline。你可以直接从C++标准中读到这一点。 - Jesper Juhl
1个回答

7

在一个类中定义复杂的成员函数会使类的定义过于复杂,阅读起来不太容易。

请记住,您可以使用函数说明符inline声明成员函数,而无需在类中定义该函数。

请注意,如果编译器将类内定义的成员函数进行非内联调用,那么与内联函数相同,对该函数的所有其他要求仍然是相同的。例如,类定义中的函数定义可以包含在许多编译单元中。

在类外定义成员函数可以将接口和实现分离。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接