glfwGetTime()和静态变量 虽然我的问题与GLFW有关,但这可能是由C++知识的人回答的。
我很难理解以下代码行的行为:glfwGetTime()和静态变量 虽然我的问题与GLFW有关,但这可能是由C++知识的人回答的。,c++,static,glfw,C++,Static,Glfw,我很难理解以下代码行的行为: static double previousSeconds = glfwGetTime(); 假设这是一个无限while循环 如果在while循环中打印出previousSeconds,则该值不会更改。例如,我会得到0.420998的永恒。glfwGetTime返回自glfw初始化以来的第二个。因此,第一次通过while查看时,它应该是0.4290998,第二次应该是。。。比如说0.44xxxxx。当我删除static时,这种行为是不同的,它会像我预期的那样计数。
static double previousSeconds = glfwGetTime();
假设这是一个无限while循环
如果在while循环中打印出previousSeconds,则该值不会更改。例如,我会得到0.420998的永恒。glfwGetTime返回自glfw初始化以来的第二个。因此,第一次通过while查看时,它应该是0.4290998,第二次应该是。。。比如说0.44xxxxx。当我删除static时,这种行为是不同的,它会像我预期的那样计数。我不明白为什么这是静态的会导致值保持不变的行为。据我所知,静态变量在调用之间保留它们的值,但我在通过while循环的每次迭代中都重新分配它的值
有人能帮我澄清一下吗?静态变量只初始化一次,如果编译器遇到另一个静态变量的初始化,它会检查它是否已经存在,如果已经存在,则忽略它 因此,在第一次通过循环初始化静态变量时,所有其他时间它都被忽略,因为它已经被初始化 我认为这部分内容包括: a的常数初始化3.6.2 具有静态存储持续时间的块范围实体(如适用)在首次输入其块之前执行。 ... 否则,这样的变量是 初始化第一次通过其声明的控件;这样的变量被认为是在 完成其初始化 非静态变量遵循以下规则: 自动存储持续时间为3.7.3的变量在每次调用其声明语句时初始化 执行
这解释了为什么非静态变量会更改,而静态变量不会更改。静态变量只初始化一次,如果编译器运行另一个静态变量初始化,它将检查它是否已经存在,如果已经存在,则忽略它 因此,在第一次通过循环初始化静态变量时,所有其他时间它都被忽略,因为它已经被初始化 我认为这部分内容包括: a的常数初始化3.6.2 具有静态存储持续时间的块范围实体(如适用)在首次输入其块之前执行。 ... 否则,这样的变量是 初始化第一次通过其声明的控件;这样的变量被认为是在 完成其初始化 非静态变量遵循以下规则: 自动存储持续时间为3.7.3的变量在每次调用其声明语句时初始化 执行
这解释了为什么非静态变量会更改,而静态变量不会更改。尝试分配而不是初始化尝试分配而不是初始化我不敢相信我没有看到我正在初始化而不是分配。谢谢我不敢相信我没有看到我是在初始化而不是赋值。谢谢