2012-10-03 54 views
0

可能重复:
When should I write the keyword 'inline' for a function/method?风格:内联函数声明中

我不是100%肯定,但据我所知,如果我声明上的HPP功能

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

是:用,因为它被标记为内联(编译器会决定做什么),我的意思是将治疗的身体文件同样比:

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

如果我错了,接下来的问题是结束了,但除此之外,我真的很喜欢作为内联标记功能,即使是没有必要的,不一般的代码风格指南说一下soemthing?

非常感谢

+0

我知道重复不准确。但作为一个关于编码风格的问题,它不会很好匹配SO – sehe

+1

“如果我在hpp文件中声明了一个函数,它将被视为标记为内联”。请注意,这仅适用于成员函数。 – jrok

回答

4

由于在这方面关键字inline的提给任何没有信息,离开它。这只是视觉上的混乱。

如果有一个选项可以内联定义的函数非内联,这将是一个不同的问题(考虑private - 默认为这样一个例子):在这里,可以认为,即使它是默认情况下,使显式选择更容易理解。但是这里没有选择。无论你做什么,一个类的内部定义的成员函数是inline

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

#define member 
#define function 

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

定义一个函数体内的类定义,使功能与关键字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) 
    { 
     ... 
    } 
}; 

虽然这是谁写的类人更容易,这是对所有的读者更难,因为它混合“什么”类一样与“如何”它做到了。由于这种混合,我们通常更喜欢使用inline关键字在类体外定义成员函数。
有意义的洞察力:在面向重用的世界中,通常会有许多人使用你的课程,但只有一个人(你自己)建立它;所以你应该做一些有利于多数人而不是少数人的事情。

0

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

+0

这是混淆的事情。 'inline'首先表示** linkage **。编译器无法做出决定,这是强制性的。不幸的是,语言设计者也使用它来暗示优化器对这样声明的函数内联调用。 –

+0

道歉;我应该更清楚一点。 我想表达的方式是:如果编译器看到这样做的好处,那么函数将由编译器内联。如上所述: [link] http://msdn.microsoft.com/en-us/library/z8y1yy88%28v=vs.80%29.aspx [/ link] – M4rc