C++11、C99下的sizeof

sizeof运算符

  • 简单定义
    sizeof是获取表达式结果的类型一个类型占用内存空间大小的运算符

  • 标准上带来的Tips
    1. C99以前,sizeof的值是编译过程就决定了的,C99以后,引入了可变长数组,sizeof的值便也可以在运行时决定。
      例子:
    int main(){
        int n;
        scanf(%d,&n);
        int a[n];//可变长数组,内存空间还是在栈上
        printf("%d\n", sizeof(a));
        return 0;
    }
    
    运行结果:
    class
    注:本gcc版本为4.9.2, 已支持C99标准
    分析:
    以上结果说明,sizeof运算符也可以在运行时取值。

    2. C++11标准中,允许使用作用域运算符对类成员进行sizeof取值,而不局限于使用类对象获取类成员。因为sizeof仅是对表达式结果的类型取所占用空间大小,而不会实际使用该对象
    例子:
    struct A{
        double a;
        int b;
    };
    int main(){
        printf("%d\n", sizeof(A::a));
        printf("%d\n", sizeof(A::b));
    
        return 0;
    }
    
    执行结果:
    class
    注:本g++编译器支持C++11
posted @ 2020-03-02 23:20  LeeQMoon  阅读(568)  评论(0)    收藏  举报