C++之sizeof操作符

时间:2022-05-19 17:46:09

(1)sizeof操作符的返回值类型size_t

sizeof操作符的作用是返回一个对象或类型名的长度,返回值的类型是size_t。size_t是标准库中的类型,定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版本,它是一个与机器相关的unsigned类型,其大小足以保证存储内存中的对象的大小。

(2)sizeof操作符的用法

sizeof的结果是编译时常量,它的使用有三种形式:

a. sizeof (type name)

b. sizeof (expr)

c. sizeof expr

以上返回的结果都不是expr的值,而是expr的结果的类型的长度,因此,对于sizeof *p,即使p指向一个无效地址,结果也是合法的,因为他计算的是p指向的对象对应的类型长度。

sizeof的结果与类型的关系:

i. 对char类型或者值为char类型的表达式做sizeof的结果都为1;

ii. 对引用类型做sizeof操作的结果将返回存放此引用类型对象所需的内存空间的大小;

iii. 对指针做sizeof操作将返回存放指针所需的内存大小;如果要获取指针所指向对象的类型大小,则必须对指针解引用;

iv. 对数组做sizeof操作等效于对其元素类型做sizeof的结果乘上数组元素的个数。

(3)sizeof代码示例 

C++之sizeof操作符C++之sizeof操作符
 1 #include<iostream>
 2 using namespace std;
 3 #include<cstdlib>
 4 
 5 void GetLengthInnerType()
 6 {
 7     size_t cRes = sizeof (char);
 8     size_t bRes = sizeof (bool);
 9     size_t wcRes = sizeof (wchar_t);
10     size_t iRes = sizeof (int);
11     size_t lRes = sizeof (long int);
12     size_t fRes = sizeof (float);
13     size_t dRes = sizeof (double);
14     size_t ldRes = sizeof (long double);
15     
16 
17     cout<<"char:"<<cRes<<endl<<"bool:"<<bRes<<endl<<"wchar_t:"<<wcRes<<endl<<"int:"<<iRes<<endl
18         <<"long:"<<lRes<<endl<<"float:"<<fRes<<endl<<"double:"<<dRes<<endl<<"long double:"<<ldRes<<endl;
19 }
20 
21 void main()
22 {
23     GetLengthInnerType();
24 
25     int a = 2;
26     double b = 4.1;
27 
28     int& aa = a;
29     double& bb = b;
30 
31     cout<<"sizeof aa:"<<sizeof aa<<endl;
32     cout<<"sizeof bb:"<<sizeof bb<<endl;
33 
34     int* pa = &a;
35     double* pb = &b;
36 
37     cout<<"sizeof pa:"<<sizeof pa<<endl;
38     cout<<"sizeof pb:"<<sizeof pb<<endl;
39 
40     cout<<"sizeof *pa:"<<sizeof *pa<<endl;
41     cout<<"sizeof *pb:"<<sizeof *pb<<endl;
42 
43     system("pause");
44 }
View Code

运行结果:

C++之sizeof操作符