public:
     inline int GetValue() const {
          return m_nValue;
     }
     inline void SetValue(int nNewValue) {
          this -> m_nValue = nNewValue;
     }

学习C++, 他们说它要跑得更快。因此,我认为这将是伟大的使用对吸气,并制定者。但也许,也有一些缺点?

有帮助吗?

解决方案

我没有内联任何东西,直到探查已明确告诉我,没有内联导致性能问题。

C ++编译器是很聪明,几乎肯定会自动直列这种简单函数这样你。而且通常它比你更聪明,并会在决定什么应该或不应该做内联一个更好的工作。

我会避免什么或不在线,并专注于解决方案的想法。后来加入inline关键字(其不是内联BTW保证)是很容易做到的和潜在的地方都可以很容易地以探查被发现。

其他提示

如果你写他们的定义中,它们被认为是inline默认

这意味着它们会在多个编译单元被允许(因为类定义本身通常出现在多个编译单元),的,它们将实际的内联。

这是在公共API坏的做法是把这些功能的任何变化要求所有客户端的重新编译。

<强>在常规具有getter和setter是表示抽象差,不这样做。 如果你经常去的原始数据中另一个类,那么你可能需要重新安排你的类,而不是考虑如何想一个类中操纵数据和这样做提供适当的方法。

负点:

  1. 编译器是免费的忽略。

  2. 任何变化,这些功能需要重新编译的所有客户。

  3. 一个很好的编译器会内联非内联的职能无论如何当它是合适的。

我倒是也想补充一点,除非你在每帧中执行数以百万计的获取/套,这几乎是无关紧要是否这些都是内联与否。这是说实话不值得多虑。

此外,记住,只是因为你把这个词“内联”在你的宣言+定义的前面,并不意味着编译器将内联代码。它的使用各种试探摸出是否有意义,这往往是经典的权衡速度VS的尺寸。然而,有蛮力“__forceinline”关键字,在VC ++租赁(我不知道它是什么,在海湾合作委员会),其重踏在编译器花哨启发。我真的完全不推荐它,再说一旦移植到不同的体系结构,它很可能是不正确的。

尝试把所有的函数定义在实现文件中,并留下了纯声明的标题(当然,除非你是模板元编程(STL / BOOST /等),在这种情况下,几乎一切都在头;))

一个经典的地方,人们喜欢在线(至少在视频游戏,这是我来自哪里)的,在数学头。十字/点积,矢量长度,矩阵结算等经常被放置在报头中,这只是觉得是不必要的。 9/10它对性能没有区别,如果你需要做一个紧密的循环,如一些矩阵变换的大型向量数组,你可能会更好过手工做数学内联,甚至更好的编码它特定于平台的汇编程序。

哦,还有一点,如果你觉得你真的需要一类是比代码更多的数据,考虑使用好老的结构,这不会带来抽象OO行李吧,这就是它的存在了。 :)

对不起,不是故意要那么多下去,但我只是觉得它有助于要考虑现实世界中的用例,而不要太挂了迂腐的编译器设置(相信我,我去过那儿;))

好运。

沙恩

该代码将不再略有编译,你失去的封装。一切都取决于项目及其性质的大小。在大多数情况下,它的确定,使他们行内,如果他们没有任何复杂的逻辑。

顺便说一句,如果直接在类定义实现可以跳过inline

通过将代码中的头,你是暴露你的内部类的运作。客户可以看到这一点,并做出假设你的类是如何工作的。这可以使它更难以以后改变你的课,而不会破坏客户端代码。

我会说,你不必与理会。阅读关于内联的常见问题解答部分。

没有必要,开始信任编译器,至少对于这样的优化!点击 “但是,并不总是”

inline关键字是没有意义的,你的情况

编译器会如果可以,想直列不管关键字的功能。

在关键字inline影响联和不内联。它比较混乱,但阅读它。

如果定义是在不同的编译单元(预处理后的源文件,基本上)低于该呼叫,如果整个项目优化和链接时代码生成启用内联将仅是可能的。大大启用它增加交联时间(因为它实际上是重新编译在连接一切),但显然可以提高性能。不知道是否是开启或关闭默认情况下,海湾合作委员会和VS

我得说,我没有强烈的反感这种做法,其他人在此线程似乎有。我同意,从内联的性能增益是微不足道的,但在所有的最频繁使用的情况下。 (是的,我的的遇到这样的情况在实践中。)如果我做这样的内联的,我这样做是为了方便,一般只为单行这样。在大多数我使用的情况下,需要在客户端上重新编译避免如果我改变他们只是不说强。

是的,你可以删除inline,因为它是由执行的位置暗示。

另外,我有点惊讶于对访问者的气势。你很难打喷嚏在任何OO语言中的类不吹了几下,和他们毕竟是一个有效的技术,从界面抽象的实现,所以这是一个有点自虐要求他们一样坏OO实践。它的的好的建议不写存取乱射,但我也劝你不要让在热情别过头去消灭它们。

取的是,纯粹主义者。 : - )

scroll top