sizeof 是編譯期運算符,非函數調用。編譯器根據類型推導大小,無需對象實例。
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)
sizeof,無意義且掩蓋編譯期優勢。