[英]Is function defined in class always inline?
根据一些书籍,类中定义的函数(以及标题中的定义)始终是内联的。 真的吗?
我们如何使用测试应用程序创建此类场景?
在类定义中定义的函数是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`
};
是的,确实,类中定义的成员函数是内联隐式声明的。 但是inline
只是你给编译器的一个建议。 编译器可以忽略它。
如果您想了解不同场景会发生什么,您可以阅读汇编程序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.