2

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

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

一个好的编译器会自动inline这样做吗?

我应该为此失眠吗?:-)

4

3 回答 3

18

在类中定义的函数(即带有主体)隐含地是内联的候选者。在这些情况下没有必要使用inline关键字,而且这样做是不寻常的。

于 2010-05-18T14:41:25.887 回答
4

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

很可能,是的,它会的。

我应该为此失眠吗?

最好别。如果您想非常确定(或者您非常好奇),请检查编译器输出的程序集。

于 2010-05-18T14:41:24.090 回答
1

请注意,这shared_ptr是一个类模板,所以它的成员函数实际上是函数模板

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

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

于 2011-10-07T10:15:09.520 回答