c++ - 为什么这个返回类型有效?

标签 c++ vector raytracing

我正在看这个 raytracer 的源代码.在名为 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。或者当前代码是否正是程序员的意图。

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

相关文章:

c++ - 使用标准 C++ 复制大型二进制文件

c++ - DNA字符串排序函数问题

c++ - 为什么我们可以在类范围之外定义私有(private)成员

c++ - Cython 迭代器错误

c++ - 使用 push_back 将对象添加到 vector 工作正常,但是使用访问器语法 [ ] 添加对象,不起作用

javascript - 为什么我的光线行进渲染中会出现条纹?

c++ - 在光线追踪器中实现软阴影

c++ - if(null) 正在使用 clang++ 编译的特定计算机中执行

c++ - 迭代 vector/ map 数据结构 C++

c# - 什么时候结构是答案?