我发现这个代码在某处,perlin噪声发生器,我想:
static {
for(int i=0; i<512; i++) perm[i]=p[i & 255];
}
静电有什么作用?它在很多其他地方也被垃圾邮件发送了......代码实际上是用静态{}构建的。我丢失了原来的代码,所以这是我唯一的东西,但它就像上面的代码:那里没有变量声明,这就是为什么我不明白它。
答案 0 :(得分:9)
我认为这是Java,而不是C ++,这意味着它是static initialization block。
答案 1 :(得分:6)
我的猜测是它实际上是java代码和java静态块。基本上,当初始化静态变量时,或多或少地执行的块。 (当加载类时,但实际上我还没准备好回答标记为java的问题)。
答案 2 :(得分:2)
MSDN上static关键字的文档说明它可用于以下情况:
此处未说明使用static
关键字声明local scope,因此无效。
如果您尝试在函数体中编写它:
void foo(){
static{
int i = 0;
}
}
它将导致 &#34;错误C2143:语法错误:缺少&#39 ;;&#39;之前&#39; {&#39;&#34; 因为预期会有变量声明。如果将static{
替换为static;{
,则会忽略static关键字,因此您的代码可编译,但编译器仍会警告您: &#34;警告C4091:&#39;静态&#39; :在&#39; int&#39;左边忽略如果没有声明变量&#34; 。
如果您尝试将其写在功能主体之外,则会导致 &#34;错误C2447:&#39; {&#39; :缺少函数头(旧式正式列表?)&#34; 因为需要函数声明。