为什么这种返回类型有效?

时间:2016-04-04 10:20:07

标签: c++ vector raytracing

我正在查看此raytracer的源代码。在第145行名为algebra3.cpp的文件中,我们可以看到此函数:

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。那是为什么?

1 个答案:

答案 0 :(得分:1)

如果vec3可以隐式转换为vec2,那么就编译器所知,函数是正确的。

在计算它之后立即扔掉av.n[VZ]似乎很愚蠢。如果这就是程序的作用,那么我猜这可能是程序员的错误。

如果没有关于函数应该做什么的更多信息,就不可能判断它是否应该实际返回vec3,或者额外的计算是否只是遗留下来的死代码和临时应该属于vec2类型。或者当前代码是否与程序员的意图完全相同。