可能重复:
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;}
...
}
如果我错了,那么问题就结束了,但除此之外,我真的很想标记为内联函数,即使它没有必要,一般代码风格的指导方针是否会对它有所了解?
非常感谢
答案 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标头传递出去。