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

问题描述 投票:0回答:1

我在glm库中找到了这种类型的代码,也有一些其他类似的东西。我的问题是:把函数参数复制到函数内部的常量变量中,像这样的目的是什么?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);
}
c++ performance glm
1个回答
1
投票

没有什么目的。

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

不管这些考虑。如果 如果优化的目的是,那么,通过以下方式更合适。angle 由值代替:先通过引用传递,然后再复制到本地,确实没有任何作用。

© www.soinside.com 2019 - 2024. All rights reserved.