編譯期初始化與執行期初始化

2021-10-09 21:13:03 字數 1388 閱讀 8273

編譯期初始化:在源**被編譯過程中,編譯期安插一些**邏輯,完成確定的記憶體分配(並非實際分配記憶體,而是確定其大小占用,由編譯期安插**),變數的初始化。

如:全域性變數為內建型別,並且大小確定

int a=2; 

static int b=3; //static的不同只是其只在本檔案中可見

static int c=a+b;

在編譯期初始化,那麼在實際執行期都是確定的結構和邏輯,將帶來更高的效能,因為編譯器完成了一定的工作。

載入時初始化:在main()函式執行前,完成包括全域性變數,靜態變數的初始化:

例如全域性的類物件:

class a

static a* instance;

public:

static a* getinstance()

};a* a::instance=new a();

int main()

執行期初始化:指代實際程式執行期間物件(變數)的建立,包含那些動態建立的物件。由於編譯和載入時無法確定大小,因此它們只能延遲到執行期才能完成初始化,將帶來程式的效能開銷。並且由於執行期間可能是多執行緒環境,對於共享變數,還可能帶來執行緒安全問題。

int main()

另外針對靜態變數,若其是普通的具有本文可見性的普通靜態變數

其可能在編譯期(內建型別)初始化或者在載入期(類的靜態成員)初始化。

但針對函式內部的區域性static變數,其在第一次被呼叫時初始化,並且只初始化一次

語言的語法是針對源**是否違反規定,其發生在編譯期,一般認為在編譯期出現的錯誤是及時有效的,而不至於延遲到執行期再發生錯誤,那樣更為不可控。

乙個常見的例子是,類的訪問許可權只會在編譯期進行檢查,因為這些許可權是語言特性,僅僅會被編譯器進行檢查,確保符合規範,編譯鏈結後,成為機器**,這些語言特性也不復存在。

class a

這段**編譯期沒有問題,因為ptr被視作a類指標,其fun()是pulibc的

同時,在執行期也沒有問題!  因為執行期不會在檢查是否符合語言規範(也不可能檢查)

可以看到,基於虛函式機制,b的private函式被正確呼叫

Jquery 日期初始化

1.在jquery中,對於初始化的操作可以通過jquery中的ready方法來進行渲染。其寫法如下 jquery中的ready方法 document ready function 2.日期初始值獲取 獲取當前日期 給小於10的數字前新增乙個0來完成01或者02樣式的渲染。function getno...

日期初始化設定

日期初始化設定 dateformat dateformat new dateformat yyyy mm dd hh mm ss calendar calendar calendar.getinstance 設定年份 calendar.set calendar.year,calendar.get c...

js data日期初始化的5種方法

建立乙個日期物件 複製 如下 var objdate new date arguments list 引數形式有以下5種 1 new date month dd,yyyy hh mm ss 2 new date month dd,yyyy 3 new date yyyy,mth,dd,hh,mm,s...