sizeof运算符,用于计算并返回一个类型名或一个表达式大小,其返回值类型为size_t(一种机器相关的无符号整型,其值被设计得足以表示内存中任意对象的大小)。sizeof有两种形式:
1.sizeof (type);
2.sizeof expr;
对于第一种形式,我们已经能很好理解了,它就是用于获取某种类型名的大小的。比如,sizeof(int); 即是获取int类型所占字节数。对于第二种形式,正如定义中所言,它将获取一个表达式的大小,既然是表达式,那我们就可以用变量名去替代,如此,它的结果将是表达式值的类型的大小。我们可以通过以下一个例子进行验证:
double value = 0;
double *pValue = &value;
cout << sizeof pValue << endl; //pValue,指针本身
cout << sizeof *pValue << endl; //*pValue,指针所指对象
由上述代码我们可以看到,对指针进行sizeof操作,我们将得到指针类型的大小,而pValue正是一个指针值;而对*pValue进行sizeof操作,得到的则是其所指对象的值的类型的大小。
对于sizeof运算符,C++11又赋予了它新的用法,我们可以用作用域运算符来获取类成员的大小(由于sizeof并不获取类成员的实际值,当然也不存在私有公有的问题)。如,sizeof MyClass :: something;
对于sizeof运算符还需要提出的是,它部分地依赖于其作用的类型:
1.对char类型变量或者类型为char的表达式,sizeof结果为1;
2.作用于引用类型,则结果为引用绑定的对象的大小;
3.作用于指针类型,则结果为指针类型的大小;
4.作用于解引用的指针,则结果为指针所指对象的类型的大小,指针或许不一定要有效;
5.作用于数组,则结果为整个数组的大小,注意,sizeof并不会把数组转换为指针进行运算;
6.作用于string对象或vector对象,则结果仅是其固有大小,并不关系于其内元素数目。
sizeof的简单介绍就是这些,但这些特性都是需要亲自动手一个一个尝试才能有更深的印象,想千遍,不如做一遍!