类中定义的函数是否始终内联?

时间:2015-08-04 14:58:55

标签: c++ inline-functions

根据一些书籍,类中定义的函数(以及标题中的定义)始终是内联的。真的吗?

我们如何使用测试应用程序创建此类场景?

2 个答案:

答案 0 :(得分:4)

在类定义中定义的函数被隐式标记为inline

  

[C++11: 9.3/2]:成员函数可以在其类定义中定义(8.4),在这种情况下,它是内联成员函数(7.1.2),或者可以在外部定义如果已经声明但未在其类定义中定义,则为其类定义。 [..]

这与说明它们将被内联不同。

inline关键字对存储持续时间和链接要求有影响,并且必须遵守。

  

[C++11: 7.1.2/2]:带有inline说明符的函数声明(8.3.5,9.3,11.3)声明了内联函数。内联说明符向实现指示在调用点处函数体的内联替换优先于通常的函数调用机制。在呼叫点执行此内联替换不需要实现;但是,即使省略了这种内联替换,仍应遵守7.1.2定义的内联函数的其他规则。

但是,现在,您的编译器将决定是否根据自己的指标物理内联函数,而不是基于inline关键字的存在与否(因为,现在,坦白地说,编译器知道最好的)。

我不知道"测试app"你记得,但代码中的一个例子非常简单:

struct T
{
   void foo() {}  // implicitly `inline`
};

答案 1 :(得分:2)

是的,确实如此,类中定义的成员函数是内联隐式声明的。但是inline只是你给编译器的一个建议。编译器可以忽略它。

如果您想了解不同场景会发生什么,您可以阅读汇编程序