sizeof(value) vs sizeof(type)?

前端 未结 3 573
一生所求
一生所求 2021-01-02 23:37

Considering :

double data; 
double array[10]; 
std::vector vec(4, 100); 
MyClass myclass;   

Is there a difference between :

3条回答
  •  情歌与酒
    2021-01-02 23:46

    The only differences are in syntax and convenience.

    Syntactically, you're allowed to leave out the parentheses in one case, but not the other:

    double d;
    
    sizeof(double); // compiles
    sizeof(d);      // compiles
    sizeof d;       // compiles
    sizeof double;  // does NOT compile
    

    As far as convenience goes, consider something like:

    float a;
    
    x = sizeof(float);
    
    y = sizeof(a);
    

    If, for example, you sometime end up changing a from a float to a double, you'd also need to change sizeof(float) to sizeof(double) to match. If you use sizeof(a) throughout, when you change a from a float to a double, all your uses of sizeof will automatically change too, without any editing. The latter is more often a problem in C than C++, such as when calling malloc:

    float *a = malloc(10 * sizeof(float));
    

    vs.

    float *a = malloc(10 * sizeof(*a));
    

    In the first case, changing the first float to double will produce code that compiles, but has a buffer overrun. In the second case, changing the (only) float to double works fine.

提交回复
热议问题