样式:内联函数声明

时间:2012-10-03 09:15:44

标签: c++ coding-style inline

  

可能重复:
  When should I write the keyword 'inline' for a function/method?

我不是百分百肯定,但据我所知,如果我在hpp文件中声明一个函数,它将被标记为内联(编译器将决定做什么),我将被视为处理意味着:

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

与以下相同:

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

如果我错了,那么问题就结束了,但除此之外,我真的很想标记为内联函数,即使它没有必要,一般代码风格的指导方针是否会对它有所了解?

非常感谢

3 个答案:

答案 0 :(得分:4)

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

如果有一个选项可以使内联定义的函数非内联,那么这将是另一回事(考虑private - 默认为这样的例子):在这里,可以说甚至虽然这是默认设置,但明确选择会使其更容易理解。但这里别无选择。无论你做什么,在类的主体内定义的成员函数都是inline

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

#define member
#define function

class StackOverflow{
public:
    member function inline void overflow() { _overflow = true; }
}

答案 1 :(得分: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
{ ... }

This C++ Faq解释了理由:

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

虽然这对写作课程的人来说更容易,但是对于所有读者来说都更难,因为它将“what”一个类与“how”混合起来他们。由于这种混合,我们通常更喜欢使用inline关键字在班级体外定义成员函数   理解这一点的洞察力:在面向重用的世界中,通常会有很多人使用你的课程,但只有一个人建立它(你自己);因此,你应该做的事情有利于许多而不是少数。

答案 2 :(得分:0)

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