这是一个关于类设计的问题。我对编译器将如何处理这两个类感到困惑。作为面向对象的语言,C++ 需要优化文件抽象层或类型抽象以提高效率。我能想到的一个例子是迭代器。它们是与指针完全不同的类型,但编译器可以优化,例如在 for 循环中与指针一样有效。
我关心的是如果这两个类只有一个,如何让它们变得高效。这两个类是 Point3 和 Vector3 的数学表示。
Point3 上的操作非常有限,但在数学上,我们可以通过从 Origin 中减去 Point3 来制作 Vector3。我们也可以通过将 Vector3 的末端视为 Point3 来做相反的事情。
这方面的一个例子是缩放 Point3。
Point3<float> positionStart;
Vector3<float> scale;
Point3<float> positionEnd;
positionEnd = scale * positionStart;
这应该将positionStart
Point3 转换为 Vector3,进行乘法,然后将临时 Vector3 的端点分配给positionEnd
.
我们如何在 C++ 中有效地编写代码,以使这些转换实际上不会发生。因为最后 Point3 和 Vector3 用 3 个浮点数表示。在运行时,它应该是 Point3 还是 Vector3,但编译器应该关心类型而不是处理器。
我希望这很清楚,如果不是,我会尝试更好地解释我的困惑。
谢谢
** 更新 ** 为了更加关注这个问题,这可以通过转换构造函数或转换来完成。运营商。内部其实是一样的。编译器是否能够看到低谷并优化出来,我猜通过内联,那些构造函数和转换运算符。