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