一、sizeof运算符的概念
sizeof 是 C++ 中的一个单目运算符,用于计算某种类型的对象在内存中所占用的字节数。它可以用来查看变量、常量、表达式结果或数据类型本身所占用的存储空间大小。
二、sizeof运算符的两种使用格式
格式一:sizeof(类型名)
sizeof(int)
sizeof(double)
格式二:sizeof 表达式
sizeof f
sizeof (f * 12)
注意:当 sizeof 的操作数是类型名时,必须加括号;当操作数是表达式或变量名时,括号可以省略,但为了代码清晰,通常建议加上。
三、运算规则与特点
sizeof 运算的结果是一个 size_t 类型的整数值,表示指定类型或表达式结果类型所占用的字节数。
关键特性:sizeof 在编译阶段完成计算,不会对括号内的表达式进行实际求值。编译器只根据表达式的结果类型来确定字节数,不会执行表达式中的运算。
示例说明:
int a = 10;
cout << sizeof(a++) << endl; // 输出 int 类型的字节数(通常为4)
cout << a << endl; // a 的值仍然是 10,a++ 并未执行Code language: JavaScript (javascript)
四、代码示例
以下代码演示了 sizeof 运算符的各种用法:
#include <iostream>
using namespace std;
int main()
{
// 计算基本数据类型所占字节数
cout << "sizeof(int) = " << sizeof(int) << endl;
cout << "sizeof(double) = " << sizeof(double) << endl;
cout << "sizeof(char) = " << sizeof(char) << endl;
cout << "sizeof(float) = " << sizeof(float) << endl;
cout << "sizeof(bool) = " << sizeof(bool) << endl;
cout << "sizeof(short) = " << sizeof(short) << endl;
cout << "sizeof(long) = " << sizeof(long) << endl;
// 计算变量所占字节数
float f = 12.3;
cout << "sizeof(f) = " << sizeof(f) << endl;
cout << "sizeof f = " << sizeof f << endl; // 括号可以省略
// 计算表达式结果类型所占字节数
cout << "sizeof(f * 12) = " << sizeof(f * 12) << endl;
// f * 12 的结果类型为 double(float 与 int 运算提升为 double)
// 输出 double 类型的字节数(通常为8)
// 计算表达式但不求值
int x = 5;
cout << "sizeof(x = x + 1) = " << sizeof(x = x + 1) << endl;
cout << "x after sizeof = " << x << endl;
// x 的值仍然是 5,赋值操作没有执行
// 类型名必须加括号
// cout << sizeof char << endl; // 错误:类型名必须加括号
return 0;
}Code language: PHP (php)
五、常见注意事项
- 对类型名使用 sizeof 时,括号不能省略。例如 sizeof(int) 正确,sizeof int 错误。
- 对变量或表达式使用 sizeof 时,括号可以省略,但建议保留以提高可读性。
- sizeof 不会计算表达式的值,因此不会产生副作用。
- 对于数组,sizeof 返回整个数组占用的总字节数,而非数组元素个数。要计算元素个数,需用 sizeof(数组名) / sizeof(数组元素类型)。
- 对于指针,sizeof 返回指针本身所占的字节数,而非指针指向的对象大小。
六、小结
- sizeof 是编译期运算符,用于计算类型或对象所占内存字节数。
- 格式为 sizeof(类型名) 或 sizeof 表达式。
- 类型名必须加括号,表达式的括号可省略。
- sizeof 不执行表达式,不产生副作用。
- 常用于内存分配、数组长度计算等场景。
Previous: 条件运算符和条件表达式
Next: 位运算-字节和位