用法: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/5jofranks 於南昌
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.建構函式的順序 先基類的...