将函数参数复制到 const 局部变量

Copy function parameter to const local variable

我在 glm 库中挖掘,发现了这种类型的代码,还有一些其他类似的东西。我的问题是:将函数参数复制到函数内部的 const 局部变量的目的是什么,就像这样 -- T const a(angle)。是为了一些性能优势吗?

template<typename T, qualifier Q>
GLM_FUNC_QUALIFIER qua<T, Q> angleAxis(T const& angle, vec<3, T, Q> const& v)
{
    T const a(angle);
    T const s = glm::sin(a * static_cast<T>(0.5));

    return qua<T, Q>(glm::cos(a * static_cast<T>(0.5)), v * s);
}

没有目的。

这可能是为了避免重复访问 angle 的间接访问而误入歧途(作为引用,编译器可能将其实现为指针)。这是否超过复制的成本并不明显:如果类型 T 很小并且 trivially copyable 那么制作副本是免费的,但对于更大的类型,这实际上会产生不小的开销。另一方面,编译器通常可以完全避免重复的指针访问。

不管这些考虑,如果优化是目的,那么按值传递 angle 会更合适:先按引用传递,然后再传递在本地复制确实没有任何意义。