C++ 堆栈(重新)创建时的性能差异?
这两者之间是否存在性能差异:C++ 堆栈(重新)创建时的性能差异?,c++,stack,C++,Stack,这两者之间是否存在性能差异: int test; void Update() { test +=2; } 这是: void Update() { int test; test +=2; } -- 我这样问是因为第二段代码更易于阅读(您不需要在类标题中声明),所以如果性能不低,我会使用它。性能差异,不太可能。这很容易测试,但取决于编译器。检查输出组件并进行一些基准测试。如果存在差异,则可能很小 然而,有一个主要的功能差异。第二个示例实际上是无用的,因为测试将在每次更新时
int test;
void Update()
{
test +=2;
}
这是:
void Update()
{
int test;
test +=2;
}
--
我这样问是因为第二段代码更易于阅读(您不需要在类标题中声明),所以如果性能不低,我会使用它。性能差异,不太可能。这很容易测试,但取决于编译器。检查输出组件并进行一些基准测试。如果存在差异,则可能很小 然而,有一个主要的功能差异。第二个示例实际上是无用的,因为
测试
将在每次更新
时重置。为了避免这种情况,可以将其声明为static int test
,但实际上您已经再次编写了第一个示例
<>这是非常不同的事情,但也会有类似的性能。 这两个代码段之间的性能差异不大可能,只有分析代码可以可靠地说明,但是这里有一个重要的功能差异。 如果只在函数
update()
中需要test
变量,则必须在函数中声明它。这样一来,变量在函数中的作用域是有限的。这样一个局部变量的生存期被限制在它所在的作用域内。在函数体中,直到右大括号}
如果您希望test
变量在函数调用中保持状态,那么它可以是函数内部声明的局部静态变量
在函数外部声明
test
将使其成为全局变量。并且它可以在同一文件中的任何函数中访问。它也是一个全局变量,生命周期将延长到程序结束。您的测试不一致,因为测试的范围决定了所发生的事情的含义。谢谢,我知道函数的不同,我选择了一个糟糕的示例;)顺便说一句,如果我使用静态int;在函数中,这在类的实例中也是静态的吗?@Sapd:函数中声明的static int
变量将在对函数的所有调用中共享。是的,它将在类的所有实例中维护。
int main()
{
while(true)
Update();
}