sizeof

什么是 sizeof

sizeof 是编译期内置的操作符 operator, 在编译期就会求值,
而不是在运行期时调用.

int a = 0;
sizeof(a);  // 编译期就知道int的字节数是4
sizeof(int);  // 4 直接指定了类型

编译期看到sizeof(x),会在当前作用域找出x的类型,然后查出
类型在当前平台下的大小是多少.

什么是操作符?

用于执行某种特定操作的符号。操作符的处理在编译期分析语法时完成,在编译期解析并转换为底层汇编/机器指令. 有些操作符在编译期计算,例如 sizeof, alignof, + - * /常量;
有些操作符在运行时计算结果,如new/delete, + - * /变量.

操作符与函数

语法上操作符更直观,类似数学符号;操作符可以重载,但是个数有限,只能重载C++有的操作符.

操作符本质上就是函数,但是有特殊语法。
C++中操作符重载就是用函数实现的,例如

MyInt operator+(const MyInt&, const MyInt&);

操作符是函数的一种语法糖,在语法上更加自然、简洁。

对于函数重载,操作符和函数调用都有栈开销,对于Cpp内置操作符没有栈开销. 但还要看函数是否内联inline,有没有值传递等情况。

为什么需要 sizeof

处理内存大小,增加程序的健壮性. 交给编译期而不是手动计算内存大小.

int *arr = (int*)malloc(10 * sizeof(int));

sizeof 数组和指针

数组 不同于 指针。

例如

int arr[5]{0};
int *ptr = arr;
sizeof(arr) --> sizeof(int[5]) --> 5 x sizeof(int) --> 20
sizeof(ptr> --> sizeof(int*) --> 8 (64位系统)

在某些情况下,数组会退化decay为指针:arr作为参数传递;
数组作为指针计算arr + 1.

posted @ 2025-04-07 09:05  代码改变头发  阅读(21)  评论(0)    收藏  举报