// 簡化了 memset 的使用
inline void memzero(void* p, size_t n)
// 用於在繼承關係中, 子類指標轉化為父類指標;隱式轉換
// inferred 推斷,因為 from type 可以被推斷出來,所以使用方法和 static_cast 相同
templateinline to implicit_cast(from const &f)
template// use like this: down_cast(foo);
inline to down_cast(from* f) // so we only accept pointers
#if !defined(ndebug) && !defined(google_protobuf_no_rtti)
assert(f == null || dynamic_cast(f) != null); // rtti: debug mode only!
#endif
return static_cast(f);
}
指標向上轉化的過程中可以安心的使用 implicit_cast<> 因為都會成功,但是在指標向下的轉化中你並不能確定 subclassoffoo 一定是 foo 的子類,需要使用 dynamic_cast<>來動態的轉化來確保沒有問題。
在 debug 巨集被定義的情況下使用 dynamic_cast<> 避免錯誤,在實際release版本中使用static_cast 提高速度。
C 列舉型別解析
列舉是開發者可以定義的乙個型別。列舉的關鍵特徵是它標識了乙個在編譯時定義的所有可能值得集合,每個值都由乙個名稱來引用,這就使得 更加的易讀。我們採用與類相似的語法來定義乙個列舉 列舉型別的宣告必須跟類是平級的 如 enum connectionstate 布林型別的引數也適合使用列舉。例如 像set...
C 列舉型別解析
列舉是開發者可以定義的乙個型別。列舉的關鍵特徵是它標識了乙個在編譯時定義的所有可能值得集合,每個值都由乙個名稱來引用,這就使得 更加的易讀。我們採用與類相似的語法來定義乙個列舉 列舉型別的宣告必須跟類是平級的 如 enum connectionstate 布林型別的引數也適合使用列舉。例如 像set...
C 深入解析資料型別
1.值型別和引用型別的原理 2.執行緒棧和託管堆 3.裝箱和拆箱 4.型別判等 c 的基本型別是按照資料在計算機記憶體是如何被分配來劃分,一種是值型別 value type 基礎型別是結構,使用中記憶體儲存在棧中,一種是引用型別 reference type 基礎型別是類,使用中記憶體儲存在堆中常用...