sizeof 运算符语法:
sizeof (type)
sizeof (expr)
sizeof expr
sizeof 运算符返回一条表达式或一个类型名字所占的字节数,其返回值是 size_t 类型的常量表达式。
sizeof 运算符对其作用的类型的依赖:
- 对 char 或者类型为 char 的表达式执行 sizeof 运算,结果是1。
- 对引用类型执行 sizeof 运算得到被引用对象所占空间的大小。
- 对指针执行 sizeof 运算得到指针本身所占空间的大小。
- 对解引用指针执行 sizeof 运算得到指针指向的对象所占空间的大小,指针不需要有效。
- 对数组执行 sizeof 运算得到整个数组所占空间的大小,等价于对数组中所有的元素各执行一次 sizeof 运算并将所得结果求和。注意, sizeof 运算不会把数组转换成指针来处理。
- 对 string 对象或者 vector 对象执行 sizeof 运算只返回该类型固定部分的大小,不会计算对象中的元素占了多少空间。
- sizeof 仅仅是一个编译期的行为,对于计算表达式的时候,只会取其类型,而不会实际的运算表达式,例如:
int i = 1; sizeof ++i;
,在执行完 sizeof 运算后输出 i ,得到的值仍然是 1。
测试代码如下:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int i = 1;
int &r = i;
int *p = &i;
int arr[10] = {
};
vector<int> v;
cout << "sizeof(char): " << sizeof(char) << endl; // 1
cout << "sizeof (r): " << sizeof(r) << endl; // 4
cout << "sizeof (p): " << sizeof(p) << endl; // 8 (amd64)
cout << "sizeof (*p + 10): " << sizeof(*p + 10) << endl; // 4
cout << "sizeof (arr): " << sizeof(arr) << endl; // 40
cout << "sizeof (v): " << sizeof(v) << endl; // 24
cout << "sizeof ++i: " << sizeof ++i << endl; // 4
cout << "i: " << i << endl; // 1
return 0;
}
参考资料:《C++ Prime》