gpt4 book ai didi

c++ - glfwGetTime() 和静态变量

转载 作者:行者123 更新时间:2023-11-30 01:55:26 35 4
gpt4 key购买 nike

*虽然我的问题与 glfw 有关,但 C++ 知识比我多的人可能会回答这个问题。

我很难理解以下代码行的行为:

static double previousSeconds = glfwGetTime();

假设这是一个无限的 while 循环。

如果我在 while 循环中打印出 previousSeconds,该值不会改变。例如,我将永远得到 0.420998。 glfwGetTime() 返回 glfw 初始化后的秒数。所以第一次通过 while 看它应该是 0.4290998 而第二次它应该是......比如 0.44xxxxx。当我删除“静态”时,这种行为是不同的,然后它会按照我的预期进行计数。我不明白为什么这是静态的会导致值保持不变的行为。据我所知,静态变量在调用之间保留它们的值,但我在 while 循环的每次迭代中重新分配它的值。

有人可以帮我解决这个问题吗?

最佳答案

静态变量只初始化一次,如果编译器运行静态变量的另一个初始化,它将检查它是否已经存在,如果存在,则忽略它。

因此,第一次通过循环初始化静态变量,所有其他时间它被忽略,因为它已经被初始化。

我认为这部分C standard N3797包括这个:

Constant initialization (3.6.2) of a block-scope entity with static storage duration, if applicable, is performed before its block is first entered.
...
Otherwise such a variable is initialized the first time control passes through its declaration; such a variable is considered initialized upon the completion of its initialization.

非静态变量遵循以下规则:

Variables with automatic storage duration (3.7.3) are initialized each time their declaration-statement is executed.

这解释了为什么非静态变量会改变,而静态变量不会。

关于c++ - glfwGetTime() 和静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20755236/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com