为什么有时在类中定义C ++方法?

时间:2008-11-05 21:51:29

标签: c++ optimization compiler-construction inline-functions

我经常遇到C ++中的大型非模板类,其中简单方法直接在头文件的类体中定义,而不是在实现文件中单独定义。例如:

class Foo {
  int getBar() const { return bar; }
  ...
};

为什么这样?好像有缺点。实现不是应该隐藏的,代码的可读性较差,如果类的头文件包含在许多不同的地方,编译器的负担也会增加。

我的猜测是人们打算在其他模块中内联这些功能,这可以显着提高性能。但是,我听说较新的编译器可以跨模块在链接时进行内联(和其他过程间优化)。对这种链接时优化的支持有多广泛,它是否真的使这些定义变得不必要?这些定义还有其他充分的理由吗?

3 个答案:

答案 0 :(得分:14)

C ++标准规定,类定义中定义的方法默认为inline。这为简单的函数(如getter和setter)带来了明显的性能提升。链接时跨模块优化更难,尽管一些编译器可以做到。

答案 1 :(得分:7)

除了它之外没有任何理由可以更轻松并节省时间。它还在实现文件中节省了一点混乱,同时在头文件中占用相同数量的行。如果它只限于吸气剂和制定者这样的东西,那么可读性会降低很多。

答案 2 :(得分:2)

你回答了自己的问题,他们确实是内联方法。

使用它们的原因是性能。