glfwGetTime()和静态变量

时间:2013-12-24 05:18:06

标签: c++ static glfw

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

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

static double previousSeconds = glfwGetTime();

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

我认为C standard N3797的这一部分涵盖了这一点:

  

a的常量初始化(3.6.2)   具有静态存储持续时间的块范围实体(如果适用)在首次输入块之前执行   ...
  否则这样的变量是   初始化第一次控制通过其声明;这样的变量被认为是初始化的   完成初始化。

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

  

每个声明语句都会初始化具有自动存储持续时间(3.7.3)的变量   执行。

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