1.导言
本来是在C 群里回答一个很简单的类型转换后判断字节的问题,后来发现代码中有个点还蛮有意思的,所以记录下来
2.场景
有这个代码
代码语言:javascript复制int a = 5;
sizeof(a );
cout << a << endl;
我发现a竟然输出的5,来想自增后不是变成6吗
这是因为 sizeof
是一个编译时运算符,它不会对其操作数进行求值。在这个例子中,sizeof(a )
只会返回变量 a
的大小,而不会执行 a
这个操作。所以,当输出 a
的值时,它仍然是初始值 5。
如果把代码改为
代码语言:javascript复制sizeof(b = a 5);
b不会变成10,和上一个例子一样,sizeof
是一个编译时运算符,它不会对其操作数进行求值。所以,即使你写 sizeof(b = a 6)
,b
的值也不会改变
3.原理
sizeof
是一个编译时运算符,这意味着它在编译时就会计算出结果。编译器会根据操作数的类型来确定 sizeof
的结果,而不是根据操作数的值。因此,即使操作数是一个表达式,sizeof
也不会对它进行求值。
也可以理解为sizeof里面如果有等号的话,等号右边的东西都是没用的