0

可能重复:
我应该何时为函数/方法编写关键字“内联”?

我不是 100% 确定,但据我所知,如果我在带有正文的 hpp 文件上声明一个函数,它将被视为被标记为内联(编译器将决定做什么),我的意思是:

//myfile.hpp
class StackOverflow{
public:
    void overflow(){_overflow = true;}
...
}

将与以下内容相同:

//myfile.hpp
class StackOverflow{
public:
    ***inline*** void overflow(){_overflow = true;}
...
}

如果我错了,那么问题就结束了,但除此之外,我真的很喜欢将函数标记为内联函数,即使没有必要,通用代码样式指南是否对此有所说明?

非常感谢

4

3 回答 3

4

inline由于在此上下文中提及关键字没有提供任何信息,因此请忽略它。这只是视觉上的混乱。

如果有一个选项可以使内联定义的函数成为非内联函数,这将是另一回事(以private-by-default 为例):在这里,可以说即使它是默认值,也可以做出选择显式使它更容易理解。但这里别无选择。无论您做什么,在类体内定义的成员函数都是inline.

事实上,将其明确标记为inline类似于提供其他推断信息。你不会写下面的,对吧?

#define member
#define function

class StackOverflow{
public:
    member function inline void overflow() { _overflow = true; }
}
于 2012-10-03T09:24:32.437 回答
2

在类定义中定义函数体使函数隐含地与用关键字标记它相同inline

就编码风格而言,仅在类中定义函数体并不是一个好习惯。

class Foo {
public:
  void method();  ← best practice: don't put the inline keyword here
  ...
};

inline void Foo::method()  ← best practice: put the inline keyword here
{ ... }

此 C++ 常见问题解答解释了基本原理:

class Fred {
public:
  void f(int i, char c)
    {
      ...
    }
};

尽管这对编写课程的人来说更容易,但对所有读者来说却更难,因为它将课程的“做什么”与它的“如何”混合在一起。由于这种混合,我们通常更喜欢使用inline关键字在类主体之外定义成员函数。
理解这一点的洞察力:在面向重用的世界中,通常会有很多人使用您的类,但只有一个人(您自己)构建它;因此,您应该做有利于多数而不是少数的事情。

于 2012-10-03T09:18:51.907 回答
0

如果您在类中将函数声明为内联函数,就像register关键字一样,编译器可以确定(这是一个建议)它是否是一个明智的优化。一般来说,使用在类本身内联编程的内联函数是一个经验法则,但是它也可以在类的实现中完成,尽管并不常见,它提供的唯一好处是链接,如果你决定将 .h/.hpp 文件作为 API 标头传递。

于 2012-10-03T09:25:34.020 回答