sizeof遇到自增的情况

简介: sizeof遇到自增的情况

1.导言

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

2.场景

有这个代码

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

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

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

如果把代码改为

sizeof(b = a + 5);

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

3.原理

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

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

相关文章
|
6月前
|
编译器 C语言
sizeof,sizeof与strlen的区别
sizeof,sizeof与strlen的区别
56 0
sizeof,sizeof与strlen的区别
|
6月前
按字节赋值的memset
按字节赋值的memset
48 0
|
30天前
|
存储 C语言
使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小
【10月更文挑战第13天】使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小。
76 1
|
1月前
|
编译器 C++
sizeof 和 strlen 的区别
`sizeof` 和 `strlen` 是 C 和 C++ 中常用的运算符/函数,功能和用途不同
63 11
|
6月前
|
编译器 C++
C++_int负数转unsigned
C++_int负数转unsigned
62 0
|
6月前
|
安全
来自c++primer5的sizeof运算符
来自c++primer5的sizeof运算符
35 0
|
6月前
|
Serverless
sizeof和strlen的区别【详解】
sizeof和strlen的区别【详解】
56 0
|
11月前
strlen与sizeof的区别
strlen与sizeof的区别
73 0
sizeof与strlen区别
sizeof是关键字,参数可以是各种数据(包括函数,类型,对象,数组,指针……)用于计算数据所占字节大小 strlen是函数,参数类型必须是字符型指针(char *),用于计算字符串,从字符串的第一个地址开始遍历,直到遇到‘\0’停止
80 0