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

Swa*_*nil 3 c++ inline-functions

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

我们如何使用测试应用程序创建这样的场景?

Lig*_*ica 5

在类定义中定义的函数被隐式标记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关键字来决定是否物理内联函数(因为如今,坦率地说,编译器最清楚)。

我不知道您想到的是什么“测试应用程序”,但是在代码中的一个例子很简单:

struct T
{
   void foo() {}  // implicitly `inline`
};
Run Code Online (Sandbox Code Playgroud)