C 學習筆記 3

2021-05-22 05:51:11 字數 778 閱讀 5473

最近在寫code時候,發現了關於static變數的一些使用需要注意的地方。具體的情況可以看下面的例子:

aclass.h   // 宣告了aclass

class aclass

int data;

aclass.cpp // 定義了乙個static的aclass例項

#include "aclass.h"

static aclass a;

bclass.h  // 宣告了bclass

class bclass {

bclass()

data = a.data;

int data;

bclass.h // 定義了bclass的乙個靜態變數

#include "bclass.h"

#include "aclass.h"

static bclass b;

就像以上**上面這樣,在編譯在最終**之後,在呼叫獲得b的時候,並不能保證a此時已經被初始化,所以此時b.data的值是未知的。這裡的問題是因為在乙個static的**裡面呼叫了不被包含(aclass.cpp)初始化過程的static變數,這個變數的初始化在另外的原始檔裡面。

在編譯的時候,這樣的**並不會報錯,但是在執行的時候有一半的機會會出現出現,只有在編譯的最終**裡面,a的初始化**恰巧在foo()的定義前面,這樣才會正常執行。

這個我是參考了這個faq的資料:http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.12

裡面還有說明解決的方案。

c 學習筆記3

toolstrip工具欄的用法 toolstrip的設定 影象和選單用到的屬性 displaystyle屬性和textimagerelation屬性。displaystyle屬性設定工具欄上每乙個按鈕上顯示影象 顯示文字或者顯示影象和文字,預設是只顯示影象。textimagerelation屬性設定...

C 學習筆記3

陣列 foreach 多維陣列 一次new 鋸齒陣列 陣列的元素是陣列,還得再new子陣列 array類 length arraylist 動態陣列 泛型list 是具有佔位符的,型別安全性,效能優於arraylist dictionary 委託delegate和事件event 或者 用於關聯事件 ...

C 學習筆記 3

new int new int 10 delete p delete p new 和 delete 是關鍵字也是運算子 new 的時候是先得到空間,然後初始化 delete 的時候是先析構,然後收回空間 在動態記憶體分配的時候,程式內部有乙個資料表來記錄你每次申請的記憶體的首位址和大小 delete...