代码之家  ›  专栏  ›  技术社区  ›  Jay Conrod

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

  •  10
  • Jay Conrod  · 技术社区  · 17 年前

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

    我的猜测是,人们希望将这些函数内联到其他模块中,这可以显著提高性能。然而,我听说较新的编译器可以在模块之间的链接时间进行内联(和其他过程间优化)。对这种链路时间优化的支持有多广泛,它是否确实使这些定义变得不必要?这些定义还有其他充分的理由吗?

    3 回复  |  直到 11 年前
        1
  •  14
  •   Adam Rosenfield    17 年前

    C++标准说明类定义中定义的方法是 inline 默认情况下。这使得诸如getter和setter之类的简单函数的性能明显提高。链接时间跨模块优化比较困难,尽管有些编译器可以做到这一点。

        2
  •  7
  •   Gerald    17 年前

    通常情况下,除了更简单和节省时间之外,没有其他原因。它还节省了实现文件中的一些混乱,同时占用了头文件中相同的行数。如果仅限于诸如getter和setter之类的东西,那么可读性较差是相当长的一段时间。

        3
  •  2
  •   Toon Krijthe    17 年前

    使用它们的原因是性能。