为什么不是boost :: shared_ptr - >运营商声明内联?

时间:2010-05-18 14:38:52

标签: c++ boost inline shared-ptr

由于可以非常频繁地调用boost::shared_ptr并且只是返回一个指针,->运算符不是inlined的良好候选者吗?

T * operator-> () const // never throws
{
    BOOST_ASSERT(px != 0);
    return px;
}

好的编译器会自动inline吗?

我应该失眠吗? : - )

3 个答案:

答案 0 :(得分:18)

在类中定义的函数(即使用正文)是内联的隐式候选者。在这些情况下,不需要使用inline关键字,这样做很不寻常。

答案 1 :(得分:4)

  

一个好的编译器会自动内联这个吗?

很可能,是的,它会。

  

我应该失眠吗?

最好不要。如果你想要超级肯定(或者你非常好奇),请检查从编译器发出的程序集。

答案 2 :(得分:1)

请注意,shared_ptr模板类,因此其成员函数实际上是功能模板

由于它们不是export,因此它们不仅必须声明,而且还必须在使用它们的所有翻译单元中定义,就像使用inline存储说明符定义的函数。

在某种程度上,template也意味着inline