c ++ static关键字对大括号有什么作用?

时间:2012-02-24 13:07:03

标签: java c++ visual-c++

我发现这个代码在某处,perlin噪声发生器,我想:

static {
    for(int i=0; i<512; i++) perm[i]=p[i & 255];
}

静电有什么作用?它在很多其他地方也被垃圾邮件发送了......代码实际上是用静态{}构建的。我丢失了原来的代码,所以这是我唯一的东西,但它就像上面的代码:那里没有变量声明,这就是为什么我不明白它。

3 个答案:

答案 0 :(得分:9)

我认为这是Java,而不是C ++,这意味着它是static initialization block

答案 1 :(得分:6)

我的猜测是它实际上是java代码和java静态块。基本上,当初始化静态变量时,或多或少地执行的块。 (当加载类时,但实际上我还没准备好回答标记为java的问题)。

答案 2 :(得分:2)

MSDN上static关键字的文档说明它可用于以下情况:

  1. 在文件范围声明变量或函数时..
  2. 在函数中声明变量时...
  3. 在类声明中声明数据成员时
  4. 在类声明中声明成员函数时......
  5. 此处未说明使用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; 因为需要函数声明。