4.9 sizeof 运算符
4.9 sizeof 运算符
sizeof
运算符返回一条表达式或一个类型名字所占的字节数。sizeof
运算符满足右结合律,其所得的值是一个size_t
类型的常量表达式。运算符的运算对象又两种形式:
sizeof (type)
sizeof expr
在第二种形式中,sizeof
返回的是表达式结果类型的大小,sizeof
并不实际计算其运算对象的值。
Sales_data data, *p;
sizeof(Sales_data); // 存储 Sales_data 类型的对象所占的空间大小
sizeof data; // data 的类型大小,即 sizeof(Sales_data)
sizeof *p; // p 所指向类型的空间大小,即 sizeof(Sales_data)
sizeof p; // p 指针所占的空间大小
sizeof data.revenue; // Sales_data 的 revenue 成员对应类型的大小
sizeof Sales_data::revenus; // 另一种获取 revenue 大小的方式
sizeof
运算符的结果部分地依赖于其作用的类型:
- 对
char
或者类型为char
的表达式执行sizeof
运算,结果得 1 - 对引用类型执行
sizeof
运算得到被引用对象所占空间的大小 - 对指针执行
sizeof
运算得到指针本身所占空间的大小 - 对解引用指针执行
sizeof
运算得到指针指向的对象所占空间的大小,指针不需有效 - 对数组执行
sizeof
运算得到整个数组所占空间的大小,等价于对数组中所有元素各执行一次sizeof
运算并将所得结果求和 - 对
string
对象或vector
对象执行sizeof
运算只返回该类型固定部分的大小,不会计算对象中的元素占用了多少空间
// 返回数组 ia 的元素数量
constexpr size_t sz = sizeof(ia) / sizeof(*ia);
int arr2[sz]; // sizeof 返回一个常量表达式,可以用结果声明数组的维度