首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 中 sizeof 獲取類成員大小的完整指南:無需實例化

     編輯:程式設計綜合問答

sizeof 操作符核心特性

sizeof 是編譯期運算符,非函數調用。編譯器根據類型推導大小,無需對象實例。

標準 C++ (C++11 起) 支持的寫法

struct XXX { char strname[100]; };
// 現代編譯器均支持
size_t sz = sizeof(XXX::strname); // 直接通過類名訪問成員

VC6.0 (1998) 不支持此語法,屬於編譯器實現缺陷。升級至 VS2015+、GCC 4.7+、Clang 3.0+ 即可解決。

兼容舊編譯器的變通方案

// 方案一:臨時對象(不佔用運行時內存)
size_t sz = sizeof(XXX().strname);

// 方案二:指針解引用(純編譯期計算)
size_t sz = sizeof(((XXX*)0)->strname);

// 方案三:模板元編程(C++03 兼容)
template <typename T, typename M>
size_t member_size(M T::*ptr) { return sizeof(ptr); }
// 使用:member_size(&XXX::strname)

避坑指南

  • 含虛函數的類對象大小包含 vptr,但成員大小不受影響。
  • 位域、對齊屬性可能導致大小與預期不符,以編譯器實際輸出為準。
  • 勿在運行期動態計算 sizeof,無意義且掩蓋編譯期優勢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved