由于boost::shared_ptr
可以非常频繁地调用并简单地返回一个指针,所以->
运算符不是一个很好的候选者inlined
吗?
T * operator-> () const // never throws
{
BOOST_ASSERT(px != 0);
return px;
}
一个好的编译器会自动inline
这样做吗?
我应该为此失眠吗?:-)
由于boost::shared_ptr
可以非常频繁地调用并简单地返回一个指针,所以->
运算符不是一个很好的候选者inlined
吗?
T * operator-> () const // never throws
{
BOOST_ASSERT(px != 0);
return px;
}
一个好的编译器会自动inline
这样做吗?
我应该为此失眠吗?:-)
在类中定义的函数(即带有主体)隐含地是内联的候选者。在这些情况下没有必要使用inline
关键字,而且这样做是不寻常的。
一个好的编译器会自动内联吗?
很可能,是的,它会的。
我应该为此失眠吗?
最好别。如果您想非常确定(或者您非常好奇),请检查编译器输出的程序集。
请注意,这shared_ptr
是一个类模板,所以它的成员函数实际上是函数模板。
由于它们不是export
ed,因此它们不仅必须声明,而且还 必须在使用它们的所有翻译单元中定义,就像使用inline
存储说明符定义的函数一样。
在某种程度上,template
也意味着inline
。