C++ OpenGL - 这里静态关键字有什么用
C++ OpenGL - What is the use of the static keyword here?
为什么我们不能决定让它是非静态的?它让我们做什么?
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"块运行。
相关文章:
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- "friend"关键字在C++中是什么意思?
- 有什么技巧可以避免在模板类中使用"typename"关键字吗
- 关键字使用的功能是什么?
- 为动态创建的数组使用静态关键字有什么意义吗?
- 统一初始化是隐式发生的,即使 int 强制转换运算符是使用 explicit 关键字声明的.原因是什么?
- ELI5 函数名称后面的"&&"关键字是什么意思
- 在 Objective-C++ 中应用于__weak指针时,通过关键字推导类型"auto"规则是什么?
- 静态关键字有什么用
- 什么是消除歧义的关键字模板
- 内联函数 - 相对于内联关键字,它们到底是什么
- "using"关键字在 c++ 中究竟有什么作用?
- 使用关键字,我做错了什么
- 自动C 关键字有什么作用
- 作为返回类型的枚举关键字的存在表明什么
- 'protected'关键字在联合中有什么用?
- C++中"using"关键字背后的逻辑是什么?
- 关键字 static 在 C 和 C++ 之间有什么区别?
- c++ 类访问关键字"signals"是什么意思?