文章

sizeof遇到自增的问题

1.导言

本来是在C++群里回答一个很简单的类型转换后判断字节的问题,后来发现代码中有个点还蛮有意思的,所以记录下来

2.场景

有这个代码

1
2
3
int a = 5;
sizeof(a++);
cout << a << endl;

我发现a竟然输出的5,来想自增后不是变成6吗

这是因为 sizeof 是一个编译时运算符,它不会对其操作数进行求值。在这个例子中,sizeof(a++) 只会返回变量 a 的大小,而不会执行 a++ 这个操作。所以,当输出 a 的值时,它仍然是初始值 5。

如果把代码改为

1
sizeof(b = a + 5);

b不会变成10,和上一个例子一样,sizeof 是一个编译时运算符,它不会对其操作数进行求值。所以,即使你写 sizeof(b = a + 6)b 的值也不会改变

3.原理

sizeof 是一个编译时运算符,这意味着它在编译时就会计算出结果。编译器会根据操作数的类型来确定 sizeof 的结果,而不是根据操作数的值。因此,即使操作数是一个表达式,sizeof 也不会对它进行求值。

也可以理解为sizeof里面如果有等号的话,等号右边的东西都是没用的

本文由作者按照 CC BY 4.0 进行授权