sizeof运算符

来源:互联网 发布:基因大数据分析 编辑:程序博客网 时间:2024/05/21 04:44
    sizeof运算符,我们在很多地方都能看到它的身影,或许我们看到的更多的是诸如sizeof(int)这样的形式,但有时,我们也会看到sizeof p; 这样的形式,对于第一种,我们从字面都理解了它的意思,但第二种或许会让你有些犯迷糊,它是获取p的大小,还是p的类型的大小呢?对于这个问题,我们还是先对sizeof先有个清楚的认识吧,下面就开始对sizeof进行简单介绍:

    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的简单介绍就是这些,但这些特性都是需要亲自动手一个一个尝试才能有更深的印象,想千遍,不如做一遍!

0 0