来自Cai-san 出的一道公司的面试题目, 以后向Cai-san 学习的机会比较少了, 可惜啊
在运行时,我们可以用
#define PAD_SIZE(s) (((s)+3)&~3)
PAD_SIZE(sizeof(T)) == sizeof(T)
判断一个数据类型是否没有被编译器填充数据。
那么编译时如何做?
答案是
// ---------------------------------------------------------------------------
COMPILE_TIME_ASSERT_FUNCTION_SCOPE(PAD_SIZE(sizeof(T)) == sizeof(T));
template<bool> struct CompileTimeAssert;
template<> struct CompileTimeAssert<true> {};
#define COMPILE_TIME_ASSERT(_exp) /
template class CompileTimeAssert< (_exp) >;
#define COMPILE_TIME_ASSERT_FUNCTION_SCOPE(_exp) /
CompileTimeAssert<( _exp )>();
// ---------------------------------------------------------------------------
这个代码在Android里的
frameworks/base/include/utils/Debug.h中。