C C 學習 之四 static cast

2021-06-08 06:38:41 字數 1416 閱讀 5144

用法:static_cast < type-id > ( expression )

《c++primer 第四版》中說編譯器隱式執行的任何型別轉換都可以由static_cast顯式完成!

要注意的是,此轉換沒有執行時檢測安全!他不能轉換掉expression的const、volatile、或者__unaligned屬性。他也不是用來去掉static屬性的! 大家應該清楚static限定符吧,他會造成範圍性的影響,而const則不同,他只是限定變數或物件自身!

當你用static限定符限定乙個變數的時候,就拿類中吧,他會隨類的第乙個例項物件的出現而出現,並且可以被這個類的所有物件所使用!!

c++中的static_cast執行非多型

的轉換,用於代替c中通常的轉換操作。

對於我們的static_cast轉換符,他不僅可以應用到指標和引用上,而且還可以應用到基礎資料結構和物件上!如:

double da = 1.1;

void *pa = &da;

double *dp = static_cast(pa);

int ia = static_cast(da);

cout << *dp << endl;

cout << ia << endl;

ok,**編譯通過!

《c++primer》告訴我們,對於乙個由較大的算術型別到乙個較小的型別的賦值,編譯器通常會報錯,然後當我們顯示地提供強制型別轉換的時候,警告資訊就關閉了!

要知道我們的static_cast的真正用處不是在指標的引用上,而是在基礎型別的轉換和物件的轉換上!

我們的static_cast也支援指向基類的指標和指向子類的指標之間的轉換!

如:

class a

virtual void b()

private:

int i;

};class b:public a

};int main(void)

ok,編譯通過!

但是在這裡要注意的是,我們從基類轉換到子類是乙個不安全的行為,在這裡先做了解,在下面的dynamic_cast中還會講到這方面的問題!

2012/8/5

jofranks 於南昌

C C 學習筆記 四

到目前為止,我們定義的所有函式都是在它們第一次被呼叫 通常是在main中 之前,而把main 函式放在最後。如果重複以上幾個例子,但把main 函式放在其它被它呼叫的函式之前,你就會遇到編譯錯誤。原因是在呼叫乙個函式之前,函式必須已經被定義了,就像我們前面例子中所做的。但實際上還有一種方法來避免在m...

C C 學習筆記(四)

1,c 為類提供的特殊成員函式 預設建構函式 編譯器提供乙個不接受任何引數,也不執行任何操作的建構函式,在建立類物件的時候會被呼叫,如果現式的定義了建構函式,那麼 預設建構函式將不會被呼叫。預設析構函式 複製建構函式 複製建構函式用於將乙個物件複製到新建立的物件中,它使用者在初始化過程中而不是在賦值...

C C 之基礎學習筆記

1.空類 建構函式 成員函式都是不占用空間的,都是乙個size為1,作為類的佔位符,如何區分類 2.如果乙個類含有虛函式,那麼他的size將會是8 x64位 2.1 virtual大小是否與系統平台相關?x64和x86 2.2 vptr和vtable的原理和資料結構如何?3.建構函式的順序 先基類的...