应该在函数中初始化一个变量还是全局初始化?[已关闭]

问题描述 投票:0回答:4

我正在用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;
}
c++ variables memory memory-leaks game-engine
4个回答
3
投票

变量应该被定义 尽可能 尽可能的到使用它们的地方。声明和初始化之间的距离越长,代码就越容易出错。

在函数中定义变量的好处是,你可以把它们标记为 const(!). 然后你要通知代码的读者,这些变量永远不会改变。

请记住,你是为人们而不是为编译器写代码的。对于这个简单的用例,可能会有 没有 内存和速度上的差异--编译器将能够优化掉变量。


0
投票

这完全取决于你的代码。如果你只在一个函数(或类)中需要这些变量,就在它里面初始化它们。但如果你需要在多个函数(全局)中使用,你可以全局初始化它们。使用较少的全局变量(通常)会让你的代码更节省内存,更快,更安全。在Google(或者像我一样在Bing上搜索 "全局变量")以获取更多信息。


0
投票

我应该全局初始化该变量,还是在函数中总是初始化变量new?

我想你把 初始化声明. 看你的代码

void mouse_callback(double posX, double posY) {
    float offsetX = posX - lastX;
    float offsetY = lastY - posY;
    lastX = posX;
    lastY = posY;
}

这里,你是 宣称 offsetXoffsetY 为局部变量,并将它们初始化为 posX - lastX 等。但是你不对这些变量做进一步的处理,你计算出来的值就会消失,只要 mouse_callback() 退出。如果你真的在使用 offsetXoffsetY 里面 mouse_callback() 在你的实际代码中,你不需要它们,这可能是好的,但像上面写的那样,你可以删除函数主体中的前两行,函数的表现仍然是一样的。但就像上面写的那样,你可以直接删除函数主体中的前两行,函数的表现还是完全一样的。

lastXlastY 显然是指具有较长寿命的变量(即全局变量或类中的实例变量),因为你在 mouse_callback() 而不对其进行声明或初始化。这些显然需要在 mouse_callback() 是所谓的,因为你在前两行中使用了它们。

总的来说,你需要知道的主要事情就是 变量需要在使用它们的值之前被初始化,即被赋予有效的值。除了那些初始化可能很慢或资源密集型的对象外,没有什么理由不在声明变量时初始化它们,不管它们是全局的还是局部的,这样做将帮助你避免那些难以追踪的错误。


-1
投票

这是一个关于优化与可读性的问题。将变量作为类成员是稍微快一些。但是可读性决定了只在需要变量的地方创建变量。只要你不需要速度上的轻微改进,就把它们保留在函数中。


-1
投票

局部变量在所有的调试器中都会显示(全局不显示),而且比全局变量快,但是局部变量的可用内存较少,你可以在不同的函数中使用它们。选择适合自己的更好。

© www.soinside.com 2019 - 2024. All rights reserved.