矩阵/向量首选项:内部返回复制或转换?

时间:2009-08-25 03:20:02

标签: vector matrix coding-style

快速了解社区的一般偏好:当使用像Vectors(数学,而不是STL)和矩阵这样的对象时,你更喜欢一个库:

A)不改变对象,而是返回副本:

Vec2 Vec2::Add(float x, float y) {
    return Vec2(this.x + x, this.y + y);
}

B)改变对象并返回引用:

Vec2& Vec2::Add(float x, float y) {
    this.x += x;
    this.y += y;
    return (*this);
}

我可以看到两者的优点和缺点,但对我来说最重要的是方法B会更有效率。

那么,意见?

2 个答案:

答案 0 :(得分:1)

取决于语言以及它如何与主导框架集成。

然而,一般来说,我更喜欢版本A,如果你只使用小矢量和矩阵。例如,如果这是一个图形库,并且您正在使用2-4个向量和3x3和4x4矩阵,我更喜欢使它们不可变,并且不一定要处理引用。 (这是为了让你使用的语言,其中建设成本不会影响你的表现。)

如果你正在处理大型矩阵,我倾向于更喜欢引用,因为复制和构造的开销太大了。

答案 1 :(得分:0)

对于值对象,通常最好返回一个新值。

并且性能可能会有很大差异