【问题标题】:Why are C++ methods sometimes defined inside classes?为什么有时在类中定义 C++ 方法?
【发布时间】:2010-09-20 23:29:23
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 是的,但是“默认内联”并不意味着编译器会内联它们,只是您不必手动添加“内联”的提示 " 关键字确实是。
    【解决方案2】:

    通常没有其他原因,只是它更容易并节省时间。它还在实现文件中节省了一点混乱,同时在头文件中占用了相同数量的行。如果它仅限于 getter 和 setter 之类的东西,那么可读性就会降低。

    【讨论】:

      【解决方案3】:

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

      使用它们的原因是性能。

      【讨论】:

      • 不过,这并不意味着编译器会内联它们,只是您不必手动添加“inline”关键字真正的提示
      猜你喜欢
      • 2012-06-23
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 2019-09-02
      • 1970-01-01
      相关资源
      最近更新 更多