C ++ OpenGL - 这里使用static关键字有什么用?

时间:2016-01-25 18:10:38

标签: c++ static

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

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;
    }

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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