我正在查看此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。这是为什么?

最佳答案

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

在计算后立即丢弃av.n[VZ]似乎很愚蠢。如果这是程序的工作,那么我将猜测可能是程序员的错误。

如果没有有关该函数应该做什么的更多信息,就无法确定它是否应该实际返回vec3,或者额外的计算是否仅仅是剩余的死代码而临时类型应该是vec2。或者当前代码是否恰好是程序员想要的。

关于c++ - 为什么此返回类型有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36400018/

10-09 08:20