簡體   English   中英

c ++ static關鍵字對大括號有什么作用?

[英]What does c++ static keyword do with braces?

我發現這個代碼在某處,perlin噪聲發生器,我想:

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

靜電有什么作用? 它在很多其他地方也被垃圾郵件發送了......代碼實際上是用靜態{}構建的。 我丟失了原來的代碼,所以這是我唯一的東西,但它就像上面的代碼:那里沒有變量聲明,這就是為什么我沒有得到它。

我認為這是Java,而不是C ++,這意味着它是一個靜態初始化塊

我的猜測是它實際上是java代碼和java靜態塊。 基本上,當初始化靜態變量時,或多或少地執行的塊。 (當加載類時,但實際上我還沒准備好回答標記為java的問題)。

MSDN上的static關鍵字文檔說明它可以在以下情況下使用:

  1. 在文件范圍聲明變量或函數時..
  2. 在函數中聲明變量時...
  3. 在類聲明中聲明數據成員時
  4. 在類聲明中聲明成員函數時...

此處未說明使用static關鍵字聲明本地范圍 ,因此無效。

如果你試圖在函數體中寫它:

void foo(){
    static{
        int i = 0;
    }
}

它將導致“錯誤C2143:語法錯誤:缺少';' 在'{'之前,因為預期變量聲明。 如果你替換static{ with static;{ ,static keyword被忽略,​​那么你的代碼就變成了可編譯的,但是編譯器仍會警告你: “警告C4091:'static':當沒有聲明變量時,在'int'的左邊忽略”

如果你試圖在函數體之外寫它,它將導致“錯誤C2447:'{':缺少函數頭(舊式正式列表?)”因為函數聲明是預期的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM