为什么此返回类型有效



我正在查看这个光线跟踪器的源代码。在名为algebra3.cpp的文件的第145行,我们可以看到这个函数:

inline vec2 operator * (const mat3& a, const vec2& v) {
    vec3 av;
    av.n[VX] = a.v[0].n[VX]*v.n[VX] + a.v[0].n[VY]*v.n[VY] + a.v[0].n[VZ];
    av.n[VY] = a.v[1].n[VX]*v.n[VX] + a.v[1].n[VY]*v.n[VY] + a.v[1].n[VZ];
    av.n[VZ] = a.v[2].n[VX]*v.n[VX] + a.v[2].n[VY]*v.n[VY] + a.v[2].n[VZ];
    return av;
}

它应该返回vec2对象,而不是返回vec3。为什么?

如果vec3可隐式转换为vec2,则该函数在编译器所知的范围内是正确的。

计算完av.n[VZ]就扔掉似乎很傻。如果程序就是这样做的,那么我猜这可能是程序员的错误。

如果没有更多关于函数应该做什么的信息,就不可能判断它是否真的应该返回vec3,或者额外的计算是否只是剩下的死代码,临时的应该是vec2类型。或者当前的代码是否正是程序员想要的。

相关内容

最新更新