【发布时间】:2010-05-18 14:38:52
【问题描述】:
由于boost::shared_ptr 可以被非常频繁地调用并简单地返回一个指针,所以-> 运算符不是inlined 的一个很好的候选者吗?
T * operator-> () const // never throws
{
BOOST_ASSERT(px != 0);
return px;
}
一个好的编译器会自动inline这个吗?
我应该为此失眠吗? :-)
【问题讨论】:
-
现在,一个好的优化编译器会比你更好地决定应该内联什么,所以会忽略
inline关键字。 -
@Blue:无论如何,忽略内联部分。但你是对的:编译器完全内联,不管
inline关键字。无inline和inline'd 函数都可以内联。 -
@BlueRaja-DannyPflughoeft,@GMan:您对此有点过度概括了。如果您无法在启用完全优化的情况下进行编译(无论出于何种原因),您可能想要控制哪些函数要内联或不内联。然后
inline变得不那么无关紧要了。我不是专家,但我猜这是关键字存在的原因之一。 -
@Jörgen:关键字的存在是出于遗留原因。编译器在过去 10 到 15 年才真正变得“智能”,而 C++ 已经存在了大约 40 年。
register关键字也是如此。
标签: c++ boost inline shared-ptr