快速了解社区的一般偏好:当使用像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会更有效率。
那么,意见?
答案 0 :(得分:1)
取决于语言以及它如何与主导框架集成。
然而,一般来说,我更喜欢版本A,如果你只使用小矢量和矩阵。例如,如果这是一个图形库,并且您正在使用2-4个向量和3x3和4x4矩阵,我更喜欢使它们不可变,并且不一定要处理引用。 (这是为了让你使用的语言,其中建设成本不会影响你的表现。)
如果你正在处理大型矩阵,我倾向于更喜欢引用,因为复制和构造的开销太大了。
答案 1 :(得分:0)
对于值对象,通常最好返回一个新值。
并且性能可能会有很大差异