我们知道,sizeof是在编译期就完成了计算,在运行时已经是一个常数值了。那sizeof能用在类似于#if这样的指令中吗?
答案一般是不行。
关于预编译条件MSDN明确写着: The expression cannot use sizeof or a type-cast operator.
其实,像#include,#if,#define等等这样的是在预处理过程就完成了包含和替换,所以他们是预处理指令。而此时还没有到编译期,还没有类型名称分析,sizeof也就不能用。
编译期完成的工作除了sizeof以外,我们还关注的就是模板的具现等。