2010-05-18 74 views
2

由于boost::shared_ptr可能会被非常频繁地调用,并且只是返回一个指针,是不是->运算符是一个很好的候选人,因为它是inlined为什么boost :: shared_ptr - >运算符不是内联的?

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

会不会有一个好的编译器自动inline这呢?

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

+0

现在,一个好的优化编译器会比你决定什么应该内联更好,所以会忽略'inline'关键字。 – 2010-05-18 15:31:55

+0

@蓝色:无论如何,忽略内联部分。但是你是对的:编译器完全内联,而不管内联关键字。没有'inline'和'inline''d函数都可以内联。 – GManNickG 2010-05-19 06:15:43

+0

@ BlueRaja-DannyPflughoeft,@GMan:你已经过分概括了这一点。如果您无法在开启完全优化的情况下进行编译(无论出于何种原因),您可能想要控制哪些函数需要内联或不内联。然后'内联'变得不那么不相关。我不是专家,但我猜这是关键字存在的原因之一。 – 2011-10-07 10:23:17

回答

4

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

很可能,是的,它会的。

我应该对此失眠吗?

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

18

在类内部定义的函数(即使用body)是隐含的内联候选项。在这些情况下,没有必要使用inline关键字,这样做很不寻常。

1

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

由于不是export版,他们不仅必须宣布,也定义在使用它们所有的翻译单位,就像与inline存储符定义的函数。

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

相关问题