考虑:
double data;
double array[10];
std::vector<int> vec(4, 100);
MyClass myclass;
有区别吗:
sizeof(double);
sizeof(double[10]);
sizeof(std::vector<int>);
sizeof(MyClass);
和
sizeof(data);
sizeof(array);
sizeof(vec);
sizeof(myclass);
这两种语法是不同的还是完全等同的?所有这些都在编译时评估吗?如果不是,哪个在运行时评估?
最佳答案
唯一的区别在于语法和便利性。
从句法上讲,您可以在一种情况下省略括号,但在另一种情况下则不能:
double d;
sizeof(double); // compiles
sizeof(d); // compiles
sizeof d; // compiles
sizeof double; // does NOT compile
就便利性而言,考虑如下内容:
float a;
x = sizeof(float);
y = sizeof(a);
例如,如果您有时最终将 a
从 float
更改为 double,您还需要更改 sizeof(float)
到 sizeof(double)
来匹配。如果您始终使用 sizeof(a)
,当您将 a
从 float
更改为 double
时,您所有的sizeof
的使用也会自动更改,无需任何编辑。后者在 C 中比在 C++ 中更常见,例如调用 malloc 时:
float *a = malloc(10 * sizeof(float));
对比
float *a = malloc(10 * sizeof(*a));
在第一种情况下,将第一个 float
更改为 double
将生成可编译但缓冲区溢出的代码。在第二种情况下,将(仅)float
更改为 double
效果很好。
关于c++ - sizeof(值)与 sizeof(类型)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12811696/