亲爱的StackOverflowers,
我已阅读了几本书,并看到了Vector类的不同示例。 现在我想知道: 在:
中,性能或可移植性(或除访问之外的任何其他内容)是否存在差异class Vector
{
public:
....
private:
float mTuple[4];
};
和
class Vector
{
public:
....
public:
float x;
float y;
float z;
float w;
};
我认为Vector.x是一个更优雅的解决方案,然后是Vector.X(); 我知道重载操作符[]会更复杂一点, 但我认为编译器应该能够轻松地将其优化到相同的速度, 它不会被Vector类的用户注意到。
你们对此有何看法?
基督教
答案 0 :(得分:2)
嗯,尽管两者都具有可移植性和高效性,但它们实际上并没有相同的含义。
如果你知道你的数组中总会有4个元素并且它们具有不同的语义(例如,3D空间中的坐标x,y和z),那么你的第二个解决方案可能更好,尽管允许公众访问字段不是很好的做法(并且不再具有高性能,因为你的编译器可以内联烦扰琐碎的getter和setter)。
如果您的向量可以包含任何(合理)数量的项目,显然您别无选择,只能使用float[]
或float*
(编辑:或更多C ++ - 类似,{{1 }或std::vector
)。
答案 1 :(得分:0)
正如已经说过的那样,便携式是两种方式,但是除非你急需性能,否则给这样的成员提供访问并不是一种好的做法。
但是,访问数组时,编译器会加载基指针并添加值以访问它。在另一种情况下,使用getter,编译器直接生成代码以访问变量的地址。
因此,访问数组时,至少需要两条指令,而在另一种情况下,只需要一条指令。不确定这是否真的得到了优化。我不会赌它,如果你的生活依赖于它,你应该确保代码完成你想要的,而不是依赖于编译器的输出。