sizeof(value)vs sizeof(type)?

Vin*_*ent 4 c++ runtime sizeof compile-time

考虑:

double data; 
double array[10]; 
std::vector<int> vec(4, 100); 
MyClass myclass;   
Run Code Online (Sandbox Code Playgroud)

是否有区别:

sizeof(double);
sizeof(double[10]);
sizeof(std::vector<int>);
sizeof(MyClass);
Run Code Online (Sandbox Code Playgroud)

sizeof(data);
sizeof(array);
sizeof(vec);
sizeof(myclass);
Run Code Online (Sandbox Code Playgroud)

这两种语法是不同的还是严格等同的?是否所有这些都在编译时进行评估?如果没有,在运行时评估哪一个?

Jer*_*fin 20

唯一的区别在于语法和便利性.

从语法上讲,你可以在一种情况下省略括号,而不是另一种情况:

double d;

sizeof(double); // compiles
sizeof(d);      // compiles
sizeof d;       // compiles
sizeof double;  // does NOT compile
Run Code Online (Sandbox Code Playgroud)

就方便而言,请考虑以下事项:

float a;

x = sizeof(float);

y = sizeof(a);
Run Code Online (Sandbox Code Playgroud)

如果,例如,你的某个时候彻底地改变了afloat一个双,你也只需要修改sizeof(float),以sizeof(double)匹配.如果您sizeof(a)在整个过程中使用,当您a从a 更改float为a时double,您的所有使用也sizeof将自动更改,而无需任何编辑.后者在C中比C++更常出现问题,例如在调用malloc时:

float *a = malloc(10 * sizeof(float));
Run Code Online (Sandbox Code Playgroud)

float *a = malloc(10 * sizeof(*a));
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,改变第一floatdouble将产生编译代码,但有一个缓冲区溢出.在第二种情况下,改变(只)float,以double精品工程.