我正在用C++编写我自己的游戏引擎,我想知道我应该在哪里初始化我每一帧都需要的变量,例如,每次鼠标指针被移动时,指针位置的坐标应该保存在一个变量中。我应该全局初始化变量还是在函数中初始化变量new?好处在哪里,坏处在哪里?
float offsetX
float offsetY
void mouse_callback(double posX, double posY) {
offsetX = posX - lastX;
offsetY = lastY - posY;
lastX = posX;
lastY = posY;
}
还是
void mouse_callback(double posX, double posY) {
float offsetX = posX - lastX;
float offsetY = lastY - posY;
lastX = posX;
lastY = posY;
}
变量应该被定义 尽可能 尽可能的到使用它们的地方。声明和初始化之间的距离越长,代码就越容易出错。
在函数中定义变量的好处是,你可以把它们标记为 const
(!). 然后你要通知代码的读者,这些变量永远不会改变。
请记住,你是为人们而不是为编译器写代码的。对于这个简单的用例,可能会有 没有 内存和速度上的差异--编译器将能够优化掉变量。
这完全取决于你的代码。如果你只在一个函数(或类)中需要这些变量,就在它里面初始化它们。但如果你需要在多个函数(全局)中使用,你可以全局初始化它们。使用较少的全局变量(通常)会让你的代码更节省内存,更快,更安全。在Google(或者像我一样在Bing上搜索 "全局变量")以获取更多信息。
我应该全局初始化该变量,还是在函数中总是初始化变量new?
我想你把 初始化 与 声明. 看你的代码
void mouse_callback(double posX, double posY) { float offsetX = posX - lastX; float offsetY = lastY - posY; lastX = posX; lastY = posY; }
这里,你是 宣称 offsetX
和 offsetY
为局部变量,并将它们初始化为 posX - lastX
等。但是你不对这些变量做进一步的处理,你计算出来的值就会消失,只要 mouse_callback()
退出。如果你真的在使用 offsetX
和 offsetY
里面 mouse_callback()
在你的实际代码中,你不需要它们,这可能是好的,但像上面写的那样,你可以删除函数主体中的前两行,函数的表现仍然是一样的。但就像上面写的那样,你可以直接删除函数主体中的前两行,函数的表现还是完全一样的。
lastX
和 lastY
显然是指具有较长寿命的变量(即全局变量或类中的实例变量),因为你在 mouse_callback()
而不对其进行声明或初始化。这些显然需要在 mouse_callback()
是所谓的,因为你在前两行中使用了它们。
总的来说,你需要知道的主要事情就是 都 变量需要在使用它们的值之前被初始化,即被赋予有效的值。除了那些初始化可能很慢或资源密集型的对象外,没有什么理由不在声明变量时初始化它们,不管它们是全局的还是局部的,这样做将帮助你避免那些难以追踪的错误。
这是一个关于优化与可读性的问题。将变量作为类成员是稍微快一些。但是可读性决定了只在需要变量的地方创建变量。只要你不需要速度上的轻微改进,就把它们保留在函数中。
局部变量在所有的调试器中都会显示(全局不显示),而且比全局变量快,但是局部变量的可用内存较少,你可以在不同的函数中使用它们。选择适合自己的更好。