C++ OpenGL - 这里静态关键字有什么用

C++ OpenGL - What is the use of the static keyword here?

本文关键字:什么 关键字 静态 OpenGL 这里 C++      更新时间:2023-10-16

为什么我们不能决定让它是非静态的?它让我们做什么?

static int nLen = 0;
    if (nLen)
    {
        nLen--;
        if (rand() % 4 == 0)
        {
            float light = (float)rand()/(float)RAND_MAX;
            if (rand() % 2 == 0)
            {
                Program.SendUniform("lightEmissive.color", 0.0, 0.0, 0.0);
                Program.SendUniform("lightPoint.diffuse", 0.0, 0.0, 0.0);
            }
            else
            {
                Program.SendUniform("lightEmissive.color", 1.0 * light, 1.0 * light, 0.8 * light);
                Program.SendUniform("lightPoint.diffuse", 0.15 * light, 0.15 * light, 0.15 * light);
            }
        }
    }
    else
    {
        Program.SendUniform("lightEmissive.color", 1.0, 1.0, 0.8);
        Program.SendUniform("lightPoint.diffuse", 0.15, 0.15, 0.15);
        if (rand() % 300 == 0)
            nLen = rand() % 180;
    }

static用作函数中的限定符时,这意味着变量将保持分配状态,并在一个函数调用到下一个函数调用时保留其值。换句话说,它具有全局生命周期。(它仍然仅在第一次调用函数时初始化)。

static 用作全局变量的限定符时,这意味着该变量保留在当前编译单元(源文件)的内部。此变量不能使用 extern type name 从另一个编译单元按名称访问(尽管可以通过指针访问)。如果两个编译单元使用相同的静态全局变量,则名称也不会冲突,程序将编译。

它旨在使变量仅对源文件可见。例如,您将无法在其他源文件中访问它。如果没有任何形式的要求...您可以自由地使其非静态。

nLen 是静态的,可以跳过 "if" 块的第一次运行。本地 nLen 会在每次调用该方法时使"if"块运行。