我使用指针传递创建了一个C函数,只有当指针不同时才会给出正确的结果。例如:
void dotransform(Point *pout, const Point *pin, transform mat)
{
pout->x = mat[0][0] * pin->x + mat[1][0] * pin->y + mat[2][0] * pin->z + mat[3][0] * 1.0;
pout->y = mat[0][1] * pin->x + mat[1][1] * pin->y + mat[2][1] * pin->z + mat[3][1] * 1.0;
pout->z = mat[0][2] * pin->x + mat[1][2] * pin->y + mat[2][2] * pin->z + mat[3][2] * 1.0;
}
dotransform()
应该像这样调用:
//...
Transform toWorldMat;
Point local;
Point world;
dotransform(&world, &local, toWorldMat );
问题是,我团队中的某个人称之为:
Point p;
dotransform(&p, &p, toWorldMat);
我花了一周的时间才弄清楚为什么程序的最终输出发生了变化。
宣布这种功能的最佳方式是什么,以避免这种情况?我这样写错了吗?
答案 0 :(得分:3)
看到你已经直接传递了transform
对象(虽然不是const&
:你真的应该这样做了)是否有任何理由你不能写代码像这样:
Point dotransform(Point const& pin, transform const& mat)
{
Point pout
pout.x = mat[0][0] * pin.x + mat[1][0] * pin.y + mat[2][0] * pin.z + mat[3][0] * 1.0;
pout.y = mat[0][1] * pin.x + mat[1][1] * pin.y + mat[2][1] * pin.z + mat[3][1] * 1.0;
pout.z = mat[0][2] * pin.x + mat[1][2] * pin.y + mat[2][2] * pin.z + mat[3][2] * 1.0;
return pout;
}
然后,您可以编写如下代码:
Transform toWorldMat;
Point local;
Point world = dotransform(local, toWorldMat);
或者这个:
Point p;
p = dotransform(p, toWorldMat);
这些是编写此代码的正确,思想的C ++方法。