假设我有这个函数:
template <class A>
inline A f()
{
A const r(/* a very complex and expensive construction */);
return r;
}
声明
r
为 const
是一个好主意吗?因为 const
变量不能被移动。请注意,返回的值并不是 const
。我正在纠结的问题是,虽然 r
确实是 const
,但将其声明为 const
可能不是一个好主意。然而,这个限定符应该帮助编译器生成更好的代码。
inline
是多余的。 - Yakk - Adam Nevraumonttemplate
函数被添加到语言中以来,它们就隐式地成为了inline
函数。inline
主要意味着“来自不同编译单元的冲突定义将被静默丢弃”,这在大多数使用template
函数的情况下都是一种要求。 - Yakk - Adam Nevraumonttemplate
函数不会隐式地成为inline
函数。它们具有允许多个相同定义的语义,这是inline
关键字必需的行为之一,但它们可能不会自动具有inline
提供的其他实现特定的行为。 - Ben Voigt